2010-06-17 70 views
1

幫助我Stackoverflow,我正在接近在我的鍵盤上關於此問題的所有「HULK SMASH」。我仔細研究過,但我顯然沒有得到正確的結果。無法從Julian INT日期轉換爲常規TSQL日期時間

我正在使用專有工具(Platinum SQL?)引用的Julian日期,儘管我在SQL 2005中工作。在運行select語句時,我可以將Julian的「特殊」版本轉換爲datetime。不幸的是,它不會插入到日期時間列中,當我嘗試時出現以下錯誤:

將char數據類型轉換爲日期時間數據類型導致超出範圍的日期時間值。

所以我不能設置日期時間標準來運行關於存儲過程的報告。

原價:733416 等效日曆值:01-09-2009

下面是我的代碼...我很接近,但我不能完全看到什麼是錯的,我需要轉換語句實際上將Julian值(733416)轉換爲兼容的TSQL DATETIME值。

SELECT  
org_id, 
CASE WHEN date_applied = 0 THEN '00-00-00' 
ELSE convert(char(50),dateadd(day,date_applied-729960,convert(datetime, '07-25-99')),101) 
END AS date_applied, 

CASE WHEN date_posted = 0 THEN '00-00-00' 
ELSE convert(char(50),dateadd(day,date_posted-729960,convert(datetime, '07-25-99')),101) 
END AS date_posted 

from general_vw 
+0

很確定我的答案解決了您的問題。如果確實如此,請將其標記爲已接受的答案,否則請讓我知道我的答案如何幫助不大。 – 2010-06-17 04:03:31

回答

1
SELECT  
org_id, 
CASE WHEN date_applied = 0 OR date_applied < 639906 THEN convert(datetime, '1753-01-01') 
ELSE dateadd(day,date_applied-729960,convert(datetime, '07-25-99')) 
END AS date_applied, 

CASE WHEN date_posted = 0 OR date_applied < 639906 THEN convert(datetime, '1753-01-01') 
ELSE dateadd(day,date_posted-729960,convert(datetime, '07-25-99')) 
END AS date_posted 

from general_vw 

你鑄造成char,但希望有一個日期時間所以這是一個簡單的解決方法。

您還使用'00 -00-00'作爲最低日期,但最小TSQL日期爲'1753-01-01'。或者,您可以使用類似('1900-01-01')的東西,但需要更改「少於」date_applied比較器。

我添加了「少於」date_applied比較器。我把它計算爲「SELECT 729960 + datediff(day,convert(datetime,'07 -25-99'),convert(datetime,'1753-01-01'))」。任何小於此值的數字都會導致日期下溢。

+0

謝謝謝謝謝謝謝謝... – bluehiro 2010-06-17 04:05:26

+0

沒問題,我添加了一個date_applied comprarer,以防date_applied小於一個會導致日期下溢的數字,但這對您的數據集可能不是問題。祝你好運。 – 2010-06-17 04:10:46

+0

感謝您的幫助。我已經計算出了整個演員的日期時間,而不是char,但最低日期讓我失望。你今晚真的保存了我的培根! – bluehiro 2010-06-17 04:17:40