在SQL中截断秒和毫秒

时间:2014-06-30 18:20:40

标签: sql sql-server date datetime

我在截断数据方面遇到了一些麻烦。我正在使用SQL的GETDATE()函数来获取当前日期和时间并将它们输入到数据库中。但是,我只想将日期和时间保存到分钟。换句话说,我想在输入新数据时保存dd / mm / yyyy hh:mm:00.000或dd / mm / yyyy hh:mm。我怎么能这样做呢?

我应该注意到我正在使用MS-SQL。

5 个答案:

答案 0 :(得分:13)

有很多方法可以做到这一点。

例如,您可以先将生成的datetimeGetDate()转换为smalldatetime,然后再点击:

CAST(GetDate() AS smalldatetime)

要清楚,这会将生成的秒数向上(或向下)舍入到最接近的分钟,具体取决于当前秒的值。

<强> <子>编辑:

或者,您可以让SQL Server截断datetime为您提供“更清洁”(READ:无舍入,因为该值已被预截断)转换为smalldatetime

CAST(DateAdd(minute, DateDiff(minute, 0, GetDate()), 0) AS smalldatetime)

答案 1 :(得分:3)

截断:

SELECT SMALLDATETIMEFROMPARTS(
         datepart(year  ,dt)
        ,datepart(month ,dt)
        ,datepart(day   ,dt)
        ,datepart(hour  ,dt)
        ,datepart(minute,dt)
      ) 
FROM (SELECT GETDATE()) t(dt)

答案 2 :(得分:2)

一种方法是将其转换为smalldatetime以进行分配(并根据需要返回)。 smalldatetime 总是有秒,超出设置为00。

SELECT CONVERT(smalldatetime, GETDATE())

由于这可能向上或向下舍入,安全截断秒的另一种方法是:

SELECT CONVERT(datetime, CONVERT(nchar(16), GETDATE(), 120), 120)

conversion code 120返回格式yyyy-mm-dd hh:mi:ss

答案 3 :(得分:0)

合并DATEADDSMALLDATETIME来截断

CAST(DATEADD(S, -30, dt) AS SMALLDATETIME)

答案 4 :(得分:0)

另一个选项不确定为什么您不能考虑前端而不是后端,因此不要更改SQL,因此不要更改前端的dd / MM / yyyy HH:mm格式或其他格式在您要实现的目标范围内,这是否可行或适当,您需要。例如,在SSRS报表中,您可以在报表设计器中格式化有问题的字段,或使用“格式”功能。如果是网页或Excel,我相信您也可以做类似的事情。