以下查询不会更新日期时间字段:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
我也尝试过没有短划线,但这也不起作用。
答案 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'