如何更新T-SQL中的DateTime字段?

Xai*_*oft 74 sql t-sql sql-server types

以下查询不会更新datetime字段:

update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Run Code Online (Sandbox Code Playgroud)

我也尝试过没有破折号,但这也不起作用.

OMG*_*ies 141

如有疑问,请使用CAST/CONVERT明确说明数据类型转换:

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1
Run Code Online (Sandbox Code Playgroud)


Ser*_*glu 32

通常,它应该工作.

但你能尝试一下吗?我的家用电脑上没有SQL,我无法尝试自己

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
Run Code Online (Sandbox Code Playgroud)


Rem*_*anu 9

字符串文字根据当前的dateformat设置显示,请参阅SET DATEFORMAT.一种始终有效的格式是'20090525'格式.

当然,现在你需要定义'不起作用'.没有记录更新?也许这Id=1与任何记录都不匹配......

如果它说'One record changed'那么你可能需要向我们展示你如何验证......


Moe*_*sko 8

使用DateTime参数是最好的方法.但是,如果您仍希望将DateTime作为字符串传递,则只要使用与语言无关的格式,就不需要CAST.

例如

给定一个表创建如下:

create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())
Run Code Online (Sandbox Code Playgroud)

以下应始终有效:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic
Run Code Online (Sandbox Code Playgroud)

以下将有效:

SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1
Run Code Online (Sandbox Code Playgroud)

但是,这不会:

SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1  
Run Code Online (Sandbox Code Playgroud)

这是因为'YYYY-MM-DD'不是语言不可知的格式(从SQL服务器的角度来看).

ISO'YYYY-MM-DDThh:mm:ss'格式也是语言不可知的,当您需要传递非零时间时非常有用.

更多信息:http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes


小智 5

UPDATE TABLE
   SET EndDate = CAST('2017-12-31' AS DATE)
 WHERE Id = '123'
Run Code Online (Sandbox Code Playgroud)