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

时间:2010-06-29 19:35:29

标签: sql sql-server tsql types

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

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

我也尝试过没有短划线,但这也不起作用。

8 个答案:

答案 0 :(得分:129)

如有疑问,be explicit about the data type conversion using CAST/CONVERT

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

答案 1 :(得分:31)

通常,它应该有用。

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

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

答案 2 :(得分:9)

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

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

如果它显示“一条记录已更改”,那么您可能需要向我们展示您如何验证......

答案 3 :(得分:8)

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

e.g。

给出如下表:

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服务器的角度来看)。

ISO'YYYY-MM-DDThh:mm:ss'格式也与语言无关,在需要传递非零时间时非常有用。

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

答案 4 :(得分:4)

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

答案 5 :(得分:2)

这应该有效,我会在[Date]周围加上括号,因为它是一个保留的关键字。

答案 6 :(得分:1)

表上是否有可能触发的触发器?

答案 7 :(得分:1)

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

这是一个例子:  

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