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

以下查询不会更新date时间字段:

update table SET EndDate = '2009-05-25' WHERE Id = 1 

我也没有破折号尝试过,但是这也行不通。

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

 UPDATE TABLE SET EndDate = CAST('2009-05-25' AS DATETIME) WHERE Id = 1 

通常,它应该工作。

但是你可以试试这个吗? 我的家用电脑上没有SQL,我无法自己尝试

 UPDATE table SET EndDate = '2009-05-25 00:00:00.000' WHERE Id = 1 

string文字根据当前date格式设置,参见SET DATEFORMAT 。 其中一种格式是“20090525”。

现在,当然,你需要定义“不起作用”。 没有logging得到更新? 也许Id=1不符合任何logging…

如果它说'一个logging改变',那么也许你需要告诉我们你是如何validation…

使用DateTime参数是最好的方法。 但是,如果您仍然希望将DateTime作为string传递,那么只要使用了与语言无关的格式,就不需要CAST。

例如

给定一个表格,如下所示:

 create table t1 (id int, EndDate DATETIME) insert t1 (id, EndDate) values (1, GETDATE()) 

以下应始终工作:

 update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic 

以下将起作用:

 SET LANGUAGE us_english update t1 set EndDate = '2010-05-25' where id = 1 

但是,这不会:

 SET LANGUAGE british update t1 set EndDate = '2010-05-25' where id = 1 

这是因为“YYYY-MM-DD”不是语言不可知的格式(从SQL服务器的angular度来看)。

ISO“YYYY-MM-DDThh:mm:ss”格式也是语言不可知的,在需要传递非零时间时非常有用。

更多信息: http : //www.karaszi.com/SQLServer/info_datetime.asp

这应该工作,我把括号[date],因为它是一个保留的关键字。

桌子上是否有触发器可以设置回来?

如果您对指定时间不感兴趣,也可以使用格式“ DD / MM / YYYY ”,但是我会坚持一种转换方法及其相关的ISO格式,因为您应该避免使用默认值。

这是一个例子:

SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'

 UPDATE TABLE SET EndDate = CAST('2017-12-31' AS DATE) WHERE Id = '123'