sql >> Databasteknik >  >> RDS >> Oracle

Tomt tecken ignoreras i where-satsen

Titta på Oracle-dokumentationen om bokstavliga :

och dokumentationen för tom vadderad jämförelsesemantik a> står:

Eftersom den vänstra sidan av jämförelsen är en CHAR(10) och den högra sidan är en bokstavlig text, då används tomstoppad jämförelsesemantik och 'hello ' = 'hello' är sant.

Du kan se detta i det enkla exemplet:

SELECT * FROM DUAL WHERE 'hello    ' = 'hello';

Uppdatera :

[TL;DR] Detta beteende har förekommit i alla versioner av Oracle sedan åtminstone Oracle 7 (släpptes 1992). Jag slutade söka efter dokumentationen om utgåvor som är över två decennier gamla men jag förväntar mig att du kommer att upptäcka att detta har varit beteendet i de flesta (alla?) versioner.

Här är dokumentationen för de olika versionerna:



  1. ORA-00054:resurs upptagen och förvärv med NOWAIT specificerad eller timeout har gått ut

  2. SQL förutom

  3. Fel vid anslutning till databasen på värdservern

  4. Hur man extraherar ett visst n:te tecken från en sträng i SQL