我有一个数据库表。其中一列,即列Time_NOW
的类型为TIME
。如果Time_NOW
为null,那么无论何时查找该条目,我都需要该列条目为当前时间。
我在列now()
中尝试了条目Time_NOW
以获取空值。但是,它在插入该行时将其值设置为当前时间。
我需要的是从该行读取该值时的当前时间。
如何做到这一点?
我正在使用MySQL。
TIA
答案 0 :(得分:1)
使用
Current_time
而不是
Now()
喜欢这个
Select coalesce(time_now,current_time) as time_now
From your_table
答案 1 :(得分:1)
无法修改列Time_NOW
的定义以获取您描述的行为。要让SQL查询执行指定的操作(据我所知),您实际上需要修改查询。
您的表定义保持不变,列可以为空,例如
`Time_NOW` TIME DEFAULT NULL
“访问”此列的SELECT
语句需要从列中检索值,测试该值是否为NULL,并在不 NULL,或者当列为NULL时返回不同的表达式。
由于Time_NOW
列的定义数据类型为TIME
,因此您几乎肯定希望替换值具有相同的数据类型,因此我们希望该替换表达式返回{{1 (不是TIME
,而不是DATETIME
等)。
表达式TIMESTAMP
将根据服务器时钟和客户端的时区返回当前时间(HH:MM:SS)。 (这不是唯一会返回当前时间的表达式;还有其他表达式将返回相同的值。)
条件测试(对于TIME(NOW())
是否为NULL)可以通过几种不同的方式完成。例如,使用ANSI标准Time_NOW
表达式,例如:
CASE
或使用MySQL SELECT CASE WHEN t.Time_NOW IS NULL THEN TIME(NOW()) ELSE t.Time_NOW END AS Time_NOW
FROM mytable t
函数:
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()
答案 2 :(得分:0)
尝试SELECT COALESCE(Time_NOW, now())
答案 3 :(得分:0)
答案 4 :(得分:0)
试
create table test (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP)