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


81

以下查询不会更新datetime字段:

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

我也尝试了没有破折号,但那也不起作用。


1
日期是实际的列名吗?
Gratzy 2010年

1
实际上不是,它是EndDate,但我只是将其缩短为Date。
Xaisoft 2010年

您收到错误消息还是只是没有结果?
Gratzy 2010年

EndDate列的数据类型是什么?
OMG Ponies,2010年

它说有1行受到影响,但是当我检查时,日期没有改变。
Xaisoft 2010年

Answers:



33

通常,它应该可以正常工作。

但是你可以尝试一下吗?我的家用电脑上没有SQL,我无法尝试

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

1
这行得通,但是我在没有全零的情况下尝试过,但是行不通。为什么?
Xaisoft 2010年

我使用“ 2009-05-25 00:02:01.000”进行了尝试,但没有成功。
Xaisoft 2010年

很好,认真的没有任何想法。因为您编写时没有时间信息,所以SQL必须自动附加默认的00:00:00.000。因此,它必须起作用。
Serkan Hekimoglu

11

根据当前的dateformat设置粘贴字符串文字,请参见SET DATEFORMAT。一直有效的一种格式是“ 20090525”。

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

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


日期格式是为什么我认为对转换进行明确说明是一个好主意……
OMG Ponies 2010年

好东西Remus,SET DATEFORMAT在为具有不同本地化的环境编写SQL时非常有效
Matt R

太棒了!这对我有用,并且为我节省了一些步骤,因为我要转换的字段已经在使用这种格式,即无需先将其转换为ISO或其他格式。
罗伯托

8

使用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



2

应该可以,我将[Date]放在方括号内,因为它是保留关键字。


2

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

这是一个例子:

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.