你如何更新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'