2016-06-15 3 views
0

Ich möchte einen Standardwert für ein Datumsfeld von heute innerhalb der Abfrage festlegen, wenn es nicht festgelegt wurde. Grundsätzlich möchte ich einen Standardwert für alle Daten verwenden, die innerhalb der WHERE-Klausel NULL sind. Unten ist vielleicht eine Idee mit Pseudocode.einen Standardwert für ein Feld in einer WHERE-Klausel festlegen, wenn es null ist

SELECT id 
FROM coupons 
WHERE expiration_date BETWEEN start_date 
AND (IF end_date IS NULL THEN RETURN current_date ELSE RETURN end_date) 

Antwort

2

USE COALESCE

SELECT id 
FROM coupons 
WHERE expiration_date BETWEEN start_date 
         AND COALESCE (end_date, current_date()) 

Nicht sicher, ob dies die beste Leistung Abfrage. Ich würde überprüfen, die EXPLAIN ANALYZE

Vielleicht so etwas wie dies besser ist

SELECT id 
FROM coupons 
WHERE expiration_date BETWEEN start_date 
          AND end_date 
    AND end_date IS NOT NULL 

UNION ALL 

SELECT id 
FROM coupons 
WHERE expiration_date BETWEEN start_date 
          AND current_date() 
    AND end_date IS NULL 
+0

Kann ich diese verwenden, um in der where-Klausel als auch? Ich wollte anhand dieses Datums bewerten, anstatt es auszuwählen. Ich werde es versuchen. – Timbinous

+0

Ja, ich verstehe Ihre Frage und aktualisiere meine Antwort. Aber ich mache mir Sorgen darüber, wie der Index funktionieren wird. Also, wenn Geschwindigkeit ein Problem wird, lass es mich wissen und vielleicht finden wir es etwas besser heraus –

+0

Ja, Geschwindigkeit ist nicht so sehr ein Problem. Ich benutze Schienen, also bin ich nicht sicher, wie Union in diesem Fall funktionieren würde. Ich habe in meiner Frage keine Schienen angegeben, das ist also nicht deine Schuld. Ich habe nie gedacht, UNION für 2 Abfragen zu verwenden. Ich denke, es ist eine gute, schlaue Antwort. Es fühlt sich (aus der Sicht eines Programmierers) an, dass es eine einfache Antwort geben sollte, die mir fehlt. – Timbinous

Verwandte Themen