我知道有几篇关于从日期时间列中删除时间部分的帖子。并且每个人都建议 DATEADD 和 DATEDIFF 方法最适合性能,个人不应该采用将日期值转换/转换为 varchar 的过程。所以我想利用下面的函数,但我不明白为什么我收到的结果仍然有与之关联的时间值,尽管时间全为零?
提供有关我为什么要了解此结果的更多信息。我有一个存储过程,我希望指定以下内容:
DECLARE @DateShippedBegin DATETIME
DECLARE @DateShippedEnd DATETIME
SET @DateShippedBegin = dateadd(dd, datediff(dd, 0, @DateShipped), 0)
SET @DateShippedEnd = dateadd(dd, datediff(dd, 0, @DateShipped) + 1, 0)
WHERE O.date_shipped >= @DateShippedBegin and O.date_shipped < @DateShippedEnd
但是,当我使用基本日期格式执行该程序时,我没有收到任何结果,因此试图了解我的程序采用的最佳概念。
Select DATEADD(dd, DATEDIFF(dd, 0, Getdate()), 0) from orders where order_no =
'1247401'
起始日期值示例:
2017-05-010 08:40:18.287
查询结果示例:
2017-05-10 00:00:00.000
一
datetime
列总是包含一个时间部分。如果您将datetime
列设置为“2017-05-10”,它将显示为2017-05-10 00:00:00
.当您想将“仅日期”与
datetime
列进行比较时,请将两个日期的时间部分设置为午夜。这通常被称为“删除”时间部分。如果您想从输出中消除时间部分,有多种选择。您可以通过使用 . 拉出各个字段,以您希望的任何格式构建日期
DATEPART
。然而,最常见的是,我看到人们将日期转换为字符串并删除时间部分:请注意,
CONVERT
此处用于格式化输出的日期值,而不是为了进行比较而更改它。我仍然会像你在代码中那样做。原因是该字段仍然是
DATETIME
数据类型。如果您希望输出仅显示日期,则需要将输出转换为varchar
(或char
在本例中),例如: