Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Pusty znak zignorowany w klauzuli where

Patrząc na dokumentację Oracle dotyczącą literałów :

oraz dokumentacją pustą semantyką porównania stany:

Ponieważ lewa strona porównania to CHAR(10) a prawa strona to literał tekstowy, a następnie używana jest semantyka porównania uzupełniona pustym polem i 'hello ' = 'hello' to prawda.

Możesz to zobaczyć na prostym przykładzie:

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

Aktualizacja :

[TL;DR] To zachowanie pojawiło się we wszystkich wersjach Oracle od co najmniej Oracle 7 (wydanego w 1992 roku). Przestałem szukać dokumentacji dotyczącej wydań sprzed ponad dwóch dekad, ale spodziewam się, że okaże się, że tak było w większości (wszystkich?) wersji.

Oto dokumentacja dla różnych wersji:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Oracle SQL dla formatu daty

  2. Oracle XMLTYPE wyodrębnia główną wartość prologu

  3. Reader.Read() nie odczytuje wierszy, mimo że ma wiersze

  4. Konwertuj na datę i godzinę z Oracle

  5. Jak mapować do i z typu złożonego w kodzie EF4.3?