对整个select语句使用相同的DateTime

时间:2019-04-18 22:42:32

标签: tsql

我继承了一些看起来像这样的代码:

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()的变体,它将在整个语句执行过程中返回相同的时间?也许声明开始时间?

请忽略以前的开发人员在字符串中存储日期时间;这不是我的工作,我正在系统地重构这种粗俗的东西。

1 个答案:

答案 0 :(得分:0)

尝试使用FORMAT(从2012年开始):

SELECT FORMAT(GETDATE(),'MM/dd/yyyy HH:mm:ss')