我有一个关于MySQL中关于根据字段中日期的可能性更新字段的case / if语句的问题。我有两个领域。一个包含日期(“LastDayToNotify”)和一个包含明文消息(“NotifyMessage”)
日期字段可以包含三个值之一 - 空字段,空字符或日期。
我的问题是 - 是否有可能,如果是这样的话,在MySQL中有一个查询根据日期(LastDayToNotify)是否已经过去设置一个字段的值(NotifyMessage)?一个例子是:
如果日期尚未过去(日期是今天或之前),请更新NotifyMessage字段以说出“通用消息”
但是如果日期字段为空,为null,或者它被传递则不执行任何操作。
我在这个帖子中测试了几个答案的修改,但是无法成功解释所有3个可能的日期场景。 Here
我知道这可能是一个新手问题,但我从未遇到过这种特殊需求。
谢谢!
答案 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)
我假设你正在使用理智的字段类型(date
或datetime
)...
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();