2016-06-16 3 views
1

Ich habe die folgende SQLSQL-Abfrage auf NULL festlegbare Spalten

select * 
from posts 
where expiry_date is > GETDATE() 

expiry_date eine Nullable-datetime Spalte ist. Grundsätzlich möchte ich alle Posts abrufen, wo sie nicht abgelaufen sind, aber auch alle Posts, bei denen expiry_date null ist.

Wie erreiche ich das? Brauche ich eine OR-Bedingung?

+4

'Wählen * aus Posts, bei denen Ablaufdatum ist> GETDATE() ODER Ablaufdatum ist NULL'? Hängt wahrscheinlich vom SQL-Dialekt ab. Kannst du entsprechend taggen? – Jeroen

Antwort

1

Einige Versionen von SQL haben NULL-safe-Operatoren. Jedoch ist die allgemeinste Methode ist ein expliziter Test:

select p.* 
from posts p 
where p.expiry_date > GETDATE() pr p.expiry_date is null; 

Sie auch diese coalesce() mit tun könnten:

select p.* 
from posts p 
where coalesce(p.expiry_date, getdate() + 1) > GETDATE() ; 
2

Below für SQL Server:

Muß ich eine ODER-Bedingung ?

Antwort: Ja

Sie haben auch einen Syntaxfehler, die ich festgelegt:

select * from posts where expiry_date > GETDATE() OR expiry_date IS NULL 
+0

Ist dieser Standard über DBMSs hinweg? –

+0

@Dani Mathew, die obige Abfrage ist für SQL Server. Die GETDATE() - Funktion ist RDBMS-spezifisch, was bedeutet, dass der Name und das Verhalten der Funktion zwischen verschiedenen Datenbank-Engines unterschiedlich ist, z. MySQL verwendet "NOW()", was äquivalent ist. – Alex

0
SELECT * FROM posts WHERE expiry_date > GETDATE() OR expiry_date is NULL 

auf SQL Server.

Verwandte Themen