2014-06-30 49 views
4

我在截斷數據時遇到了一些問題。我正在使用SQL的GETDATE()函數獲取當前的日期和時間,並將它們輸入到數據庫中。但是,我只想將日期和時間保存到一分鐘。換句話說,當我輸入新數據時,我想要dd/mm/yyyy hh:mm:00.000或dd/mm/yyyy hh:mm。我怎麼能這樣做呢?在SQL中截斷秒和毫秒

我應該注意我正在使用MS-SQL。

回答

8

有很多方法可以做到這一點。

例如,你可以在生成datetimeGetDate()轉換爲smalldatetime第一,點菜:

CAST(GetDate() AS smalldatetime) 

需要明確的是,這將圓的生成秒向上(或向下)到最接近的分鐘取決於增加當前秒數的值。

編輯:

或者,你可以有SQL服務器截斷datetime了你一個「乾淨」(讀:無舍入,因爲該值是預截斷)轉換爲smalldatetime

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

+1指出它向上或向下舍入 – KekuSemau

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

+0

1 FO r首先得到 –

+0

-1 SELECT CAST('1999-12-31 23:59:30'as smalldatetime) – Anon

+0

沒錯,smalldate會舍入,而不是截斷。 – KekuSemau

2

對於截斷:

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

要注意的是:這隻適用於SQL Server 2012及更高版本。 – KekuSemau