我在截断数据方面遇到了一些麻烦。我正在使用SQL的GETDATE()函数来获取当前日期和时间并将它们输入到数据库中。但是,我只想将日期和时间保存到分钟。换句话说,我想在输入新数据时保存dd / mm / yyyy hh:mm:00.000或dd / mm / yyyy hh:mm。我怎么能这样做呢?
我应该注意到我正在使用MS-SQL。
答案 0 :(得分:13)
有很多方法可以做到这一点。
例如,您可以先将生成的datetime
从GetDate()
转换为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)
合并DATEADD
和SMALLDATETIME
来截断
CAST(DATEADD(S, -30, dt) AS SMALLDATETIME)
答案 4 :(得分:0)
另一个选项不确定为什么您不能考虑前端而不是后端,因此不要更改SQL,因此不要更改前端的dd / MM / yyyy HH:mm格式或其他格式在您要实现的目标范围内,这是否可行或适当,您需要。例如,在SSRS报表中,您可以在报表设计器中格式化有问题的字段,或使用“格式”功能。如果是网页或Excel,我相信您也可以做类似的事情。