2011-05-19 101 views
3

我有一個(Postgre)SQL表日期所存儲這樣生成日期了多列

YEAR B-MONTH E-MONTH 
2000  01   05 
2004  03   06 
2010  07   12 
2004  01   12 

我怎樣才能把這些「真正的」日期字段?我想輸出看起來像這樣:

BEGIN   END 
2000-01-01 2000-05-31 
2004-03-01 2004-06-30 
2010-07-01 2010-12-31 
2004-01-01 2004-12-31 

在此先感謝您!

[溶液]

這是我結束了的溶液:

開始

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00') || '01', 'YYYYMMDD') AS BEGIN 

CAST(TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("E-MONTH", 'FM00') || '01', 'YYYYMMDD') + INTERVAL ('1 MONTH - 1 DAY') AS DATE) AS END 

[編輯]

它也可以這樣:

開始

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00'), 'YYYYMM') AS BEGIN 

年底

CAST(TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("E-MONTH", 'FM00'), 'YYYYMM') + INTERVAL ('1 MONTH - 1 DAY') AS DATE) AS END 
+2

請發表您到目前爲止寫的代碼。人們通常不喜歡只爲你寫代碼。事實上,這是一個工作描述,而不是一個問題。 – 2011-05-19 08:44:07

+0

感謝您的建議。我不知道如何開始,因爲我不知道將整數值轉換爲日期部分的函數。但請不要閱讀我的問題,就像我希望你爲我編碼整個事情。如果有人指向我有用的功能,我會很高興。 – speendo 2011-05-19 08:55:29

回答

5

你首先需要您的整數值轉換成字符然後進入日期,例如:

to_date(to_char(b_month, '00') || to_char(YEAR,'9999'), 'MMYYYY') as START_DATE 

的返回日期結束,不知道PostgreSQL的,如果有一個現有的函數返回月份爲ORACLE功能LAST_DAY的最後一天,所以在這裏,第二列是甲骨文下一個例子:

last_day(to_date(to_char(e_month, '00') || to_char(YEAR,'9999'), 'MMYYYY')) as END_DATE 
+0

謝謝! 'LAST_DAY'沒有在PostGreSQL中實現,但可以通過添加一個月並減去一天來幫助自己(請參閱http://wiki.postgresql.org/wiki/Date_LastDay)再次感謝您! – speendo 2011-05-19 09:28:14