我有一个数据库表。其中一列,假设列Time_NOW的类型为TIME。如果Time_NOW为null,则无论何时查找该列条目,我都需要该列条目为当前时间。
我尝试了列Time_NOW中的条目now()来查找空值。但是,它将其good值设置为插入该行时的当前时间。我需要的是从该行读取该值时的当前时间。
如何做到这一点?
我使用的是MySQL。
提亚
发布于 2014-08-30 12:10:04
使用
Current_time而不是
Now()像这样
Select coalesce(time_now,current_time) as time_now
From your_table发布于 2014-08-30 12:18:34
没有办法修改列Time_NOW的定义来获得您所描述的行为。要让SQL查询执行指定的操作(据我所知),您实际上需要修改该查询。
您的表定义保持不变,列可以为空,例如
`Time_NOW` TIME DEFAULT NULL“访问”该列的SELECT语句需要从该列中检索值,测试该值是否为NULL,如果该值不为NULL,则返回该列的值,或者当该列为NULL时,返回一个不同的表达式。
因为Time_NOW列是用TIME数据类型定义的,所以您几乎肯定希望替换值具有相同的数据类型,所以我们希望这个替代表达式返回TIME (不是DATETIME,也不是TIMESTAMP,等等)。
表达式TIME(NOW())将根据服务器时钟和客户端的时区返回当前时间(HH:MM:SS)。(这不是唯一将返回当前时间的表达式;还有其他表达式将返回相同的值。)
条件测试(对于Time_NOW是否为空)可以通过几种不同的方式来完成。例如,使用美国国家标准协会标准的CASE表达式,例如:
SELECT CASE WHEN t.Time_NOW IS NULL THEN TIME(NOW()) ELSE t.Time_NOW END AS Time_NOW
FROM mytable t或者,使用MySQL IF()函数:
SELECT IF(t.Time_NOW IS NOT NULL,t.Time_NOW,TIME(NOW())) AS Time_NOW或者,使用ISNULL()函数:
SELECT IFNULL(t.Time_NOW,TIME(NOW())) AS Time_NOW或者使用COALESCE()函数:
SELECT COALESCE(t.Time_NOW,TIME(NOW())) AS Time_NOW发布于 2014-08-30 12:07:33
试试SELECT COALESCE(Time_NOW, now())
https://stackoverflow.com/questions/25578897
复制相似问题