我在截断数据方面遇到了一些麻烦。我正在使用 SQL 的 GETDATE() 函数获取当前日期和时间,并将它们输入到数据库中。然而,我只想保存日期和时间到分钟为止。换句话说,当我输入新数据时,我希望保存为 dd/mm/yyyy hh:mm:00.000 或 dd/mm/yyyy hh:mm。我该如何做?
我应该注意到我正在使用 MS-SQL。
我在截断数据方面遇到了一些麻烦。我正在使用 SQL 的 GETDATE() 函数获取当前日期和时间,并将它们输入到数据库中。然而,我只想保存日期和时间到分钟为止。换句话说,当我输入新数据时,我希望保存为 dd/mm/yyyy hh:mm:00.000 或 dd/mm/yyyy hh:mm。我该如何做?
我应该注意到我正在使用 MS-SQL。
有许多方法可以处理这个问题。
例如,您可以首先将从 GetDate()
生成的 datetime
转换为 smalldatetime
,如下所示:
CAST(GetDate() AS smalldatetime)
需要明确的是,这将根据当前秒的值将生成的秒数四舍五入到最近的一分钟(向上或向下)。
编辑:
或者,您可以让SQL Server为您截断datetime
,以便更“清洁”地(即无需四舍五入,因为该值已被预先截断)转换为smalldatetime
:
CAST(DateAdd(minute, DateDiff(minute, 0, GetDate()), 0) AS smalldatetime)
关于截断:
SELECT SMALLDATETIMEFROMPARTS(
datepart(year ,dt)
,datepart(month ,dt)
,datepart(day ,dt)
,datepart(hour ,dt)
,datepart(minute,dt)
)
FROM (SELECT GETDATE()) t(dt)
SELECT CONVERT(smalldatetime, GETDATE())
由于这可能会四舍五入,另一种安全地 截取 秒数的方法是这样的:
SELECT CONVERT(datetime, CONVERT(nchar(16), GETDATE(), 120), 120)
转换代码120 返回格式 yyyy-mm-dd hh:mi:ss
。
结合DATEADD
和SMALLDATETIME
进行截断。
CAST(DATEADD(S, -30, dt) AS SMALLDATETIME)