将日期截断为仅小时/分钟

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.0002012-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 年。

【讨论】:

以上是关于将日期截断为仅小时/分钟的主要内容,如果未能解决你的问题,请参考以下文章

如何截断日期时间对象的时间?

使用 Now() 函数时截断日期[重复]

SSIS错误导入Excel日期(截断错误)

如何在 Oracle 的日期中添加一天的最后一小时?

sql怎么插入日期类型数据报将截断字符串或二进制数据

数据截断:不正确的日期时间值:''