2017-09-19 2 views
1

Ich habe eine Frage bezüglich case/if-Anweisungen in MySQL hinsichtlich der Aktualisierung eines Feldes basierend auf der Möglichkeit eines Datums in einem Feld. Ich habe zwei Felder. Eine mit einem Datum ("LastDayToNotify") und eine mit einer Klartextmeldung ("NotifyMessage")MySQLUpdate - Feld setzen, wenn das Datum nicht abgelaufen ist

Das Datumsfeld kann einen von drei Werten enthalten - ein leeres Feld, eine Null oder ein Datum.

Meine Frage ist - Ist es möglich, und wenn ja, wie in MySQL, eine Abfrage zu haben, die den Wert eines Feldes (NotifyMessage) basierend darauf setzt, ob das Datum (LastDayToNotify) abgelaufen ist? Ein Beispiel wäre:

Wenn das Datum nicht abgelaufen ist (das Datum ist heute oder vor), das NotifyMessage Feld aktualisieren „Generic Message“

zu sagen, aber wenn das Datumsfeld ist leer, null, oder es ist passiert es tut nichts.

Ich habe ein paar Änderungen an Antworten in diesem Thread getestet, konnte aber nicht alle 3 möglichen Datenszenarien berücksichtigen. Here

Ich weiß, dass dies wahrscheinlich eine Anfängerfrage ist, aber ich habe noch nie diese bestimmte Notwendigkeit angetroffen.

Danke!

Antwort

1

Ich nehme an, Sie sane Feldtypen (date oder datetime) verwenden .. .

UPDATE table 
SET 
    NotifyMessage = 'Generic Message' 
WHERE 
    LastDayToNotify IS NOT NULL 
    AND LastDayToNotify >= CURDATE(); 

Wenn Sie die Daten als date Typen zu speichern, zu sehen, nicht bereits sind: Converting a date in MySQL from string field

+0

nicht sicher, welche Art und Weise Sie wollen, dass die '<' vs '> =' - Ihre Logik ist ein wenig unklar ("Wenn das Datum nicht abgelaufen ist (das Datum ist heute oder bevor ") – wally

+0

Ich speichere die Daten in einem Datumsfeld, also denke ich, dass es mir gut geht. Soweit die Logik - ich habe vielleicht falsch verstanden. Der LastDayToNotify ist der letzte Tag, an dem wir die Nachricht einstellen werden. Das heißt, wenn das Datum verstrichen ist - Wir werden die Nachricht nicht mehr anbieten, aber wenn das Datum heute ist oder in der Zukunft, werden wir das Datum einstellen, bis das Datum verstrichen ist. –

1

Nach meiner Erfahrung können Sie einen Wert mit einer CASE-Anweisung nicht festlegen, aber Sie können etwas auflisten. Dies erscheint jedoch als separate Spalte.

EG

CASE WHEN date < SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) 
    THEN "Generic Message" 
    ELSE 0 
    END AS 'Before Today' 

Sie müssten dann mehr case-Anweisungen erstellen andere Szenarien abzudecken wie NULL

1

Sie diese einfache Abfrage verwenden können:

UPDATE yourTable SET NotifyMessage = 'Generic Message' 
WHERE LastDayToNotify <= CURDATE(); 
+0

Obwohl dies keine schlechte Antwort ist, könnte es verbessert werden, wenn Sie erklären, warum dies das Problem löst und was überhaupt falsch war. – David

Verwandte Themen