MySQLUpdate - 如果日期尚未过去,则设置字段

时间:2017-09-19 15:05:24

标签: php mysql sql

我有一个关于MySQL中关于根据字段中日期的可能性更新字段的case / if语句的问题。我有两个领域。一个包含日期(“LastDayToNotify”)和一个包含明文消息(“NotifyMessage”)

日期字段可以包含三个值之一 - 空字段,空字符或日期。

我的问题是 - 是否有可能,如果是这样的话,在MySQL中有一个查询根据日期(LastDayToNotify)是否已经过去设置一个字段的值(NotifyMessage)?一个例子是:

如果日期尚未过去(日期是今天或之前),请更新NotifyMessage字段以说出“通用消息”

但是如果日期字段为空,为null,或者它被传递则不执行任何操作。

我在这个帖子中测试了几个答案的修改,但是无法成功解释所有3个可能的日期场景。 Here

我知道这可能是一个新手问题,但我从未遇到过这种特殊需求。

谢谢!

3 个答案:

答案 0 :(得分:1)

根据我的经验,您无法使用CASE语句设置值,但您可以列出一些内容。但是,这将显示为单独的列。

E.G

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

然后,您必须创建更多案例陈述以涵盖其他方案,例如NULL

答案 1 :(得分:1)

我假设你正在使用理智的字段类型(datedatetime)...

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

如果您尚未将日期存储为date类型,请查看:Converting a date in MySQL from string field

答案 2 :(得分:1)

您可以使用这个简单的查询:

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