2017-08-12 40 views
-2

我正在使用SQL for IBM System i Access for Windows版本6發行版1從AS400中提取數據綠屏。我認爲這將是DB2?SQL日期格式從1YYMMDD到正常

日期數據格式爲1yymmdd,例如,2016年10月15日日期將爲1161015.我希望將該列的日期數據從1yymmdd格式轉換爲MM/DD/YYYY並將其識別爲日期不是一個數字。

問題的一部分是如果我想檢查兩個條目之間的日期差異,它會將其識別爲一個數字(例如1171015- 1161016 = 10,000),但我希望它是365天。

用這種日期格式(1yymmdd)作爲(MM/DD/YYYY)的好轉換方法是什麼?我使用的代碼

例子:

sSQL = SELECT A.DATE, curdate() 
      FROM TABLE1 A 
      LIMIT 10 

輸出是如下

1141220 8/16/2017 
1130308 8/16/2017 
1141220 8/16/2017 
1141220 8/16/2017 
1140822 8/16/2017 
1140822 8/16/2017 
1141206 8/16/2017 
1141220 8/16/2017 
1140913 8/16/2017 
1141206 8/16/2017 
+1

用你正在使用的數據庫標記你的問題。 –

+0

轉換日期和日期的函數對特定的RDMS(Oracle,SQL Server,MySQL,PostgreSQL等)高度特定。請用你正在使用的RDBMS標記你的問題。我懷疑的一件事是,最好是以字符串格式捕獲數據,並且不要「複製」前導'1'。 –

+0

我不確定這是什麼意思,但我正在使用sql for ibm iseries – MrKen

回答

0

我能想出如何正確代碼(EGADATE = 1161015)

SELECT DATE(TIMESTAMP((A.DATE + 19000000) CONCAT'000000')) 
FROM TABLE1 A 

答:

10/15/2016 

如果你想找到天差異(E.G. A.DATE1 = 1161015,A.DATE2 = 1161215):

SELECT (DAYS(DATE(TIMESTAMP((A.DATE2 + 19000000) CONCAT'000000'))) - DAYS(DATE(STANMP((A.DATE1+ 19000000) CONCAT'000000')))) 
FROM TABLE1 A 

答:

58 

感謝你們的幫助!

0

可以使用DATENAME函數來獲取月份的名稱。要獲得一天的一年,只是使用CAST

SELECT DATENAME(MM, GETDATE()) AS [DD Month] + ' ' + CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) AS [DD Month YYYY]

您還可以查看可以從SQL-SERVER-helper頁面等格式