以下查询不会更新datetime字段:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
我也尝试了没有破折号,但那也不起作用。
以下查询不会更新datetime字段:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
我也尝试了没有破折号,但那也不起作用。
EndDate
列的数据类型是什么?
Answers:
如有疑问,请明确说明使用CAST / CONVERT进行的数据类型转换:
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
根据当前的dateformat设置粘贴字符串文字,请参见SET DATEFORMAT
。一直有效的一种格式是“ 20090525”。
现在,当然,您需要定义“不起作用”。没有记录被更新?也许Id=1
与任何记录都不匹配...
如果显示“一条记录已更改”,那么您可能需要向我们展示如何验证...
SET DATEFORMAT
在为具有不同本地化的环境编写SQL时非常有效
使用DateTime参数是最好的方法。但是,如果您仍想将DateTime作为字符串传递,则只要使用了与语言无关的格式,就不需要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 Server的角度来看)。
ISO'YYYY-MM-DDThh:mm:ss'格式也与语言无关,在您需要传递非零时间时很有用。
更多信息:http : //karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'