将SQL datetime中除了00:00:00以外的所有时间值更新为00:00:00。

12
有没有一种方法可以从中更新表中的所有列?
2010-12-31 23:59:59.000

to

2010-12-31 00:00:00.000

像这样吗?
UPDATE t1
SET [Posting Date] = [Posting Date] with ms = 00:00:00.000
WHERE ms = other than 00:00:00.000
GO
6个回答

25
UPDATE t1
SET [Posting Date] = cast([Posting Date] as date)
WHERE cast([Posting Date] as time) > '00:00'

1
i-one的解决方案有效,但我要求的是where条件。因此,我接受这个作为最终答案。 - AceAlfred

7
UPDATE t1
SET [Posting Date] = CAST([Posting Date] as DATE)

5
这可能会对你有所帮助:

UPDATE tableName SET ColumnName = CAST(CAST(NOW() AS DATE) AS DATETIME);

更新表中的数据,将ColumnName列的值更改为当前日期和时间。

0

尝试:

MODIFIEDDATETIME-(cast(MODIFIEDDATETIME as time))

1
日期时间和时间数据类型在减法运算符中不兼容。 - t-clausen.dk

0

在SQL Server中

UPDATE [dbo].[1] SET  [datetime]= CAST([datetime] AS DATE) 

select * from [dbo].[1]

我没有正确检查问题,我的错。现在已经正确了!! - vhadalgi

-1
这对我有效:
update t1 set [Posting Date]  = CONVERT(varchar,[Posting Date] , 112)

但我认为这在很大程度上取决于您的数据库区域设置如何配置,您可能需要使用另一种样式(而不是112,也许是101或102...)请参见this link以查看转换的可能样式,并选择最适合您的样式。

如果您只需要执行一次此操作,可以将列类型更改为日期,保存,然后再更改回datetime,但如果表很大,则可能会耗费时间。


永远不要使用这个解决方案。你已经有了一个日期时间,不要滥用它将其转换为varchar。 - t-clausen.dk
1
我知道这是一种快速且不太规范的解决方案,但它从未给我带来过任何问题。 - Zelloss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接