我继承了一些看起来像这样的代码:
update hm
set hm.status = '130'
,hm.updatedtimestr = convert(varchar,getdate(),101) + ' ' + convert(varchar,getdate(),108)
from homemain hm
where cast(hm.ExpireTime as DATE) < GETDATE()
and hm.Status = '100'
;
这个经典的问题是在一个例程中多次调用一个时间例程,如果时钟从GETDATE()
之间的午夜之前到午夜之间滴答滴答,那么代码中会发生不良情况。具体来说,updatetimestr
可以设置为实际时间之前的24小时。
我可以添加
declare @mynow datetime;
set @mynow = GETDATE()
并使用@mynow
代替GETDATE()
,但是我宁愿使用tsql内置的东西,它被定义为在整个执行过程中返回相同的时间。
是否存在GETDATE()
的变体,它将在整个语句执行过程中返回相同的时间?也许声明开始时间?
请忽略以前的开发人员在字符串中存储日期时间;这不是我的工作,我正在系统地重构这种粗俗的东西。
答案 0 :(得分:0)
尝试使用FORMAT
(从2012年开始):
SELECT FORMAT(GETDATE(),'MM/dd/yyyy HH:mm:ss')