2011-05-19 65 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