2014-11-06 26 views
0

我想時間列舍宿舍,我搜索了論壇,發現這個漂亮的代碼:SQL變化DATEADD數據類型

select dateadd(minute, datediff(minute, 0, GETDATE())/15 * 15, 0) 

問題是這樣給我的時間作爲一個時間戳列,與日期1900-01-01,而我只想要這個時間。我找不到如何做到這一點。

+1

您沒有指定使用的是哪個版本的SQL Server。由於SQL Server 2008我們有** time **數據類型(http://msdn.microsoft.com/en-us/library/bb677243(v=sql.100).aspx)。因此,你可以只是'鑄造(...隨着時間)' – gvee 2014-11-06 13:19:33

回答

0

這會對您有所幫助。

DECLARE @datetime datetime 

SET @datetime = (select dateadd(minute, datediff(minute,0,GETDATE())/15 * 15, 0)) 

SELECT CAST(DATEPART(hour, @datetime) as varchar(2)) + 
':' + CAST(DATEPART(minute, @datetime)as varchar(2)) 
+0

thx!我對SQL很陌生,一直在想這個,@字符意味着一個自定義的構建函數? ' – bramvs 2014-11-06 12:06:39

+0

'用於指定局部變量。 '@@'指定全局變量 – 2014-11-06 12:10:51

+0

@前綴用於TSQL中的局部變量 – 2014-11-06 12:14:40

0
SELECT CONVERT(VARCHAR(10), 
       dateadd(minute, 
       datediff(minute,0,GETDATE())/15 * 15, 0), 
       108) 
0

使用轉換方法來獲取時間。

SELECT 
     CONVERT(VARCHAR(10), 
     dateadd(minute, 
     datediff(minute ,0,GETDATE())/15 * 15, 0), 
     108) 

108在上面的查詢顯示時間格式。您可以根據您的要求更改它。

您可以在這裏瞭解更多:http://www.w3schools.com/sql/func_convert.asp

0

這應該工作

SELECT CAST(DATEADD(minute, 
     DATEDIFF(minute, 0, GETDATE())/15 * 15, 0) AS TIME(0)); 
1

您沒有指定要使用的SQL Server版本。

由於SQL Server 2008我們有時間數據類型(http://msdn.microsoft.com/en-us/library/bb677243(v=sql.100).aspx)。

SELECT DateAdd(mi, DateDiff(mi, 0, GetDate())/15 * 15, 0) As original_value 
    , Convert(time, DateAdd(mi, DateDiff(mi, 0, GetDate())/15 * 15, 0)) As sql_2008_onwards 
    , Convert(char(10), DateAdd(mi, DateDiff(mi, 0, GetDate())/15 * 15, 0), 108) As pre_sql_2008 

用最後一個選項,您的最終值仍然是一段文字。理想情況下,您應該將其轉換回datetime值(Convert(datetime, <rest of code>)