2010-09-01 82 views
8

我需要將日期時間字段轉換爲特定格式的INT類型。例如,我想 2000-01-01 00:00:00.000轉換爲20010101將DateTime轉換爲Int格式的最高性能方法

什麼是在查詢中進行轉換以進行比較的最高性能方法?

喜歡的東西:

DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 + 
    DATEPART(day, orderdate) 

cast(convert(char(8), orderdate, 112) as int) 

什麼是最高效的方式做到這一點?

+2

答案很簡單:同時測試,看看哪些是「更好」(例如更快,使用較少的CPU,使用較少的讀/寫等) – 2010-09-01 16:41:16

+2

如何2000年1月1日爲「20100101」嗎? – gbn 2010-09-01 17:17:42

+0

糟糕,我犯了一個錯字。 :) – DavidStein 2010-09-01 18:25:39

回答

19

你的cast(convert(char(8), orderdate, 112) as int)例子似乎沒什麼問題。它會很快將日期縮減爲您需要的格式並轉換爲int。

從執行計劃的角度來看,兩者似乎沒有區別。

-1

這是你所需要的

SELECT REPLACE(CONVERT(VARCHAR(10),'2010-01-01 00:00:00.000',101),'-','') 
+1

這比'cast(convert(char(8),orderdate,112)int(int)'更多的工作,這也可以工作。你的例子甚至不考慮轉換爲INT。 – LittleBobbyTables 2010-09-01 16:35:50

-2

直接在代碼中傳遞'2010-01-01 00:00:00.000'時,SELECT語句將其視爲字符串而不是日期時間數據類型。它與直接選擇日期時間字段不同。

有沒有必要做外CAST,因爲SQL Server會做隱式轉換,這裏是一個證明。

DECLARE @t DATETIME = '2010-01-10 00:00:00.000',@u INT 
SELECT @u = CONVERT(CHAR(8), @t, 112) 

IF ISNUMERIC(@u) = 1 
PRINT 'Integer' 
+0

也許你提到的是這個'SELECT CONVERT(INT,CAST('2013-08-05 09:23:30'as DATETIME))'來自[here](https://msdn.microsoft.com/zh-cn/ -us/library/ms187928.aspx)轉換是**隱式** – DanielV 2015-07-20 08:15:44