Oracle
 sql >> база данни >  >> RDS >> Oracle

Празният знак се игнорира в клаузата where

Разглеждане на документацията на Oracle за литерали :

и документацията на семантика за сравнение с празни подплати заявява:

Тъй като лявата страна на сравнението е CHAR(10) и дясната страна е текстов литерал, тогава се използва семантика за сравнение с празни подплати и 'hello ' = 'hello' е вярно.

Можете да видите това в простия пример:

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

Актуализация :

[TL;DR] Това поведение се появява във всички версии на Oracle поне от Oracle 7 (издаден през 1992 г.). Спрях да търся документация за издания на повече от две десетилетия, но очаквам, че ще откриете, че това е поведението в повечето (всички?) версии.

Ето документацията за различните версии:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпълнение на Oracle JDBC на ResultSet

  2. Как да третираме MAX() на празна таблица като 0 вместо NULL

  3. Връща N колони от таблична функция

  4. ORA-06502:PL/SQL:числова или стойностна грешка:буферът на символен низ е твърде малък, изключение от C# код

  5. ORA-02287:пореден номер не е разрешен тук