我試圖通過SSIS派生列轉換將百年日期(HYD)格式轉換爲常規日期格式。例如:將41429 轉換爲06/04/2013。我可以在腳本中使用formatinng代碼來做到這一點(也許我只需要走這條路線),但是覺得必須有一種方法可以在派生列中這樣做,我只是沒有得到。任何幫助表示讚賞。ssis派生列中的百年日期轉換
0
A
回答
1
這就是我想出的。你確定你的轉換是正確的嗎?我的答案是1天。關閉。
DECLARE @t1 as date = '01/01/1900';
DECLARE @t2 as DATE = '12/31/1900';
DECLARE @hyd as INT;
- 該實施例表明,我們需要添加1 SELECT @hyd = DATEDIFF(d,@ T1,T2 @)+ 1 - 364 + 1 SELECT @hyd
set @t2 = '06/04/2013';
SELECT @hyd = DATEDIFF (d,@t1, '06/04/2013') + 1-- 41427
SELECT @hyd
SELECT DATEADD (d, @hyd, '01-JAN-1900')
SELECT DATEADD (d, 41429, '01-JAN-1900')
+0
是的,這是我正在尋找的答案。我不知道爲什麼我沒有想到這一點。謝謝。是的,我實際上從Excel電子表格中的日期轉換爲數字格式。我認爲這是關閉的 - 這更多的是說明HYD的總體思路。 –
+0
很好...請標記爲答案。 –
0
百年日期是根據自1899-12-31以來的天數計算得出的。這是一個「Excel事情」。它也有一個bug,你必須說明。
等效TSQL邏輯將是
DECLARE
@HYD int = 41429;
SELECT
@HYD =
CASE
WHEN @HYD > 60
THEN @HYD -1
ELSE
@HYD
END;
SELECT
DATEADD(d, @HYD, '1899-12-31') AS HYD;
武裝與式,我可以寫在一個派生列轉換下面的表達式(假設有一個名爲HYD
列)
(HYD > 60) ? DATEADD("d",HYD - 1,(DT_DATE)"1899-12-31") : DATEADD("d",HYD,(DT_DATE)"1899-12-31")
而結果
0
--or inline SQL...using this
SELECT
case when ([HYD] > 60) then
DATEADD(day,[HYD] - 1,'1899-12-31')
else
DATEADD(day,[HYD],'1899-12-31')
end 'HYD_conv'
FROM
TableName
--and in the where clause if you like...
WHERE
(case when ([HYD] > 60) then DATEADD(day,[HYD] - 1,'1899-12-31') else DATEADD(day,[HYD],'1899-12-31') end) = '2016-01-14'
相關問題
- 1. 派生列中的ssis數據轉換
- 2. SSIS派生列轉換否輸入
- 3. SSIS包日期格式問題轉換爲年和年轉換爲日
- 4. SSIS中派生列
- 5. SSIS派生列
- 6. SSIS - 派生列
- 7. SSIS 2008:派生列將字符串轉換爲日期數據類型
- 8. 比較SSIS派生列中的兩個日期
- 9. SSIS varchar(datecol)到日期列轉換
- 10. 使用派生列轉換編輯器驗證日期列
- 11. 在派生列ssis
- 12. SSIS派生timestamp列到日期和時間列
- 13. 轉換的一年日期
- 14. SSIS日期dataype轉換
- 15. SSIS派生列表達式 - 將日期時間變量+字符串變量轉換爲日期時間
- 16. 是否可以自動生成SSIS派生列轉換?
- 17. SSIS派生列字符串連接多個日期表達式
- 18. SSIS日期,逗號和派生列問題
- 19. SSIS將分鐘轉換爲帶有派生列的HH:MM
- 20. 派生列中的SSIS表達式用任何值替換回車的轉換
- 21. SSIS - 派生列轉換編輯器故障
- 22. SSIS派生列轉換設置爲BOOL with UPPER(LTRIM(RTRIM
- 23. 帶日期轉換的TSQL派生列檢查非日期可轉換字符串
- 24. SSIS派生列表達式
- 25. SSIS派生列舍入值
- 26. SSIS派生列語法
- 27. 「0」到date -Ssis,派生列
- 28. 將日期字符串轉換爲SSIS中的日期時間
- 29. 使用SSIS的日期轉換
- 30. 轉換日期(年月日)到天數
你可能想澄清HYD格式實際上是,或者至少鏈接到一個有用的網站。谷歌搜索沒有(立即)顯示它是什麼明確的定義。如果你有工作代碼來做,它也會很有用。 – Pondlife
HYD從1/1/1900開始,是從1/1/1900發生到您選擇的任何日期(或系統吐出)的天數。因此HYD的12/31/1900 = 366(一定是閏年),HYD的1/1/1910 = 3654(大約10年* 365加上幾天閏年),HYD爲6/4/2013 = 41429.不幸的是,我們查詢的系統有HYD格式的日期。在腳本中,簡單的答案是這行代碼:格式(DateTime.FromOADate(Row.Date2),「MM/dd/yyyy」)。在不必要的情況下,我儘量避免使用腳本,但它可能是。 –
1900年[不是閏年](http://en.wikipedia.org/wiki/Leap_year#Algorithm),所以實際的開始日期可能是1899-21-31。 – Pondlife