将日期截断为仅小时/分钟
Posted
技术标签:
【中文标题】将日期截断为仅小时/分钟【英文标题】:Truncate date to only hour / minute 【发布时间】:2012-03-20 08:51:33 【问题描述】:我如何像这样在 sql server 2008 中截断日期:
我有2012-01-02 12:04:11.443
,我只想选择2012-01-02 12:00:00.000
和2012-01-02 12:04:00.000
(小时和分钟级别)
【问题讨论】:
How can I truncate a datetime in SQL Server?的可能重复 特别是,请参阅该线程中 BG100 的答案。 T-SQL datetime rounded to nearest minute and nearest hours with using functions的可能重复 【参考方案1】:declare @D as datetime = '2012-01-02T12:04:11.443'
select dateadd(hour, datediff(hour, 0, @D), 0)
select dateadd(minute, datediff(minute, 0, @D), 0)
【讨论】:
这比我见过的任何其他解决方案都干净得多,值得投票和评论。 是的,你是对的。我一定是搞错了 docs.microsoft.com/ru-ru/sql/t-sql/functions/…【参考方案2】:这似乎有效:
select [Rounded Time] =
dateadd(mi,datediff(mi,0,dateadd(ss,30,a.DT)),0)
from
(
select dt = convert(datetime,'8:24:29.997')
union all
select dt = convert(datetime,'8:24:30.000')
) a
结果:
Rounded Time
------------------------------------------------------
1900-01-01 08:24:00.000
1900-01-01 08:25:00.000
(2 row(s) affected)
【讨论】:
如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 (
)工具栏以很好地格式化和语法突出显示它!
感谢您的回答.. Mikael Eriksson 有一个更简单的答案。还有+1的答案。谢谢【参考方案3】:
我正在使用这样的东西:
DATEADD(hour,DATEDIFF(hour,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00')
您可以使用此公式截断到其他级别,即分钟:
DATEADD(minutes,DATEDIFF(minutes,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00')
您必须记住,如果您截断到秒级别,则基准日期和 [timestamp] 之间的最大差异是 68 年。
【讨论】:
以上是关于将日期截断为仅小时/分钟的主要内容,如果未能解决你的问题,请参考以下文章