2010-05-06 284 views
1

我有一個遺留系統,其中所有日期字段都以YMD格式保存。示例:轉換爲日期的最佳方式

20101123 
this is date: 11/23/2010 

我正在尋找從數字轉換爲日期字段的最佳方法。

這裏是我想出了:

declare @ymd int 

set @ymd = 20101122 

select @ymd, convert(datetime, cast(@ymd as varchar(100)), 112) 

這是相當不錯的解決方案,但我遊蕩,如果有人有更好的辦法做

+0

最優化已經意味着最多。:p – 2010-05-06 13:29:24

回答

4

試試這個:

CONVERT(DATETIME, CONVERT(NVARCHAR, YYYYMMDD)) 

例如:

SELECT CONVERT(DATETIME, CONVERT(NVARCHAR, 20100401)) 

結果:

2010-04-01 00:00:00.000 
+0

這看起來比我的效率更高,它看起來也更好。謝謝! – IMHO 2010-05-06 14:06:07

+1

爲什麼使用NVARCHAR? char(8)會更有效率。 – 2010-05-06 17:51:46

+0

有趣的扭曲 - 這不工作作爲計算場的公式 - 任何想法? – IMHO 2010-05-07 18:31:09

2

你有什麼是一個相當不錯的soltuion。

你爲什麼尋找更好的方法?

+0

因爲我有一些行要轉換 - 我正在尋找最快的方式來做到這一點。這是不尋常的嗎? – IMHO 2010-05-06 14:05:04

+0

@IMHO:一百萬行的日期部分轉換應該花費不到一秒;) – Andomar 2010-05-06 14:23:07

0

我使用完全相同的是,它一直致力於爲我好

0

因爲它被存儲爲一個整數然後喲你可以通過除以100,1000來提取年,月和日。

例如,

DECLARE @Date INT 
SET @Date = 20100401 

DECLARE @Year INT 
DECLARE @Month INT 
DECLARE @Day INT 

SET @Year = @Date/10000 
SET @Month = (@Date - (@Year * 10000))/100 
SET @Day = @Date - (@Year * 10000) - (@Month * 100) 

SELECT @Date, DATEADD(MONTH,((@Year-1900)*12)[email protected],@Day-1) 

但是,我不知道這是否比你已經有的字符串比較更快。我認爲你的解決方案更簡潔易讀,並且堅持這一點。

相關問題