2017-02-27 2 views
0

ich eine einfache Abfrage haben (aktuelle Abfrage wird komplizierter. Es ist eine dynamische Abfrage)Ist SQL LIKE NULL gültige Syntax für alle Datenbanken?

SELECT * FROM Employee WHERE @firstName IS NULL OR firstName LIKE @firstName 

@firstName als

  • NULL
  • '% name%'
  • geben werden

Wenn @firstName als '% name%' übergeben wurde. Die Abfrage funktioniert einwandfrei.

Wenn @firstName als NULL übergeben wurde. Die Abfrage wird

SELECT * FROM Employee WHERE NULL IS NULL OR firstName LIKE NULL 

// This query is valid syntax on MSSQL and return all employees 
// because NULL IS NULL evaluated as TRUE 
// And firstName LIKE NULL evaluated as FALSE -- I guess 

Meine Frage ist

Ist vorName LIKE NULL gültig für alle SQL-Datenbanken?

Und wird es immer als FALSE ausgewertet?

Ich habe diese LIKE-Syntax geprüft https://www.w3schools.com/SQl/sql_like.asp

und dieses https://msdn.microsoft.com/en-us/library/ms179859.aspx

Aber ich habe nicht meine Antwort finden. Vielen Dank!

Antwort

1

Ja, LIKE NULL ist in allen RDBMS gültig. LIKE ist ein Operator gefolgt von einer Zeichenfolge und eine Zeichenfolge kann null sein; also kein Problem.

Vergleich Wert NULL, egal was Operator (<, <=, =, <>, LIKE usw. - mit Ausnahme IS, die speziell hergestellt wird mit NULL vergleichen), Ergebnisse in UNKNOWN.UNKNOWN ist nicht TRUE, daher ist die Bedingung im Fall NULL nicht erfüllt. Und überhaupt, im Fall @firstName enthält NULL, @firstName IS NULL zu TRUE auswertet, so dass es nicht einmal wichtig, was LIKE @firstName ergibt dann (weil @firstName IS NULL OR firstName LIKE @firstName ist TRUE, wenn mindestens eine der beiden Bedingungen ist TRUE).

+0

Vielen Dank für Ihre Antwort! Upvoted! – Loc

+0

Ich habe LIKE NULL auf Mssql, MySQL, PostgreSQL, SQLite getestet. Sie haben gut funktioniert. Aber es scheiterte auf Oracle-Datenbank. – Loc

+0

* Wie * ist es fehlgeschlagen? Es funktioniert einfach gut für mich in Oracle 11.2. Und ich bezweifle wirklich, dass irgendeine Oracle-Version das nicht korrekt behandeln würde. Das wäre ein schwerer Fehler. –

2
LIKE NULL 

ist kein aussagekräftiger Ausdruck für RDBMS, der den SQL 92-Standard unterstützt oder implementiert.

Zunächst einmal, NULL [geht den ganzen Weg zurück zu C.J. Date] bedeutet "unbekannt", also kann nichts "WIE" unbekannt sein.

Die einzigen gültigen Tests für NULL sind "IS NULL" oder "IS NOT NULL".

+0

Ich stimme zu LIKE NULL ist für RDBMS nicht sinnvoll, aber ist es gültige Syntax und wird als FALSE ausgewertet? – Loc

+0

undefined/Verhalten nicht im SQL 92-Standard definiert. MS SQL-Verhalten ist in anderen Engines nicht konsistent. –

+0

Ich muss die Abfrage auf einigen populären RDBMS testen. Vielen Dank! – Loc