我在数据库中有两个日期字段,名为“EFFECTIVE_DATE”和“POINT_DATE”
如何创建新的日期字段,其中日期由“EFFECTIVE_DATE”年份,“POINT_DATE”月份和“POINT_DATE”日组成?
我通常会使用Datefromparts,但这是Oracle数据库而不是Microsoft
亲切的问候
答案 0 :(得分:2)
以下是使用ADD_MONTHS
和EXTRACT(YEAR FROM ....)
的方法。您只需添加或减去所需的月数(总是12的倍数,因为您只更改年份)。与TO_CHAR
/ TO_DATE
解决方案不同,此方法处理闰日(2月29日)。另一方面,请注意,将日期从2003年2月28日更改为2012年将更改为2月29日(ADD_MONTHS
将一个月的最后一天更改为结果月份的最后一天)。
with
inputs as (
select date '2013-03-22' as effective_date,
date '2017-08-14' as point_date
from dual
)
-- end of TEST data (do not include in the solution!)
select effective_date, point_date,
add_months(point_date, 12 * ( extract (year from effective_date) -
extract (year from point_date) )
) as mixed_date
from inputs;
EFFECTIVE_DATE POINT_DATE MIXED_DATE
-------------- ---------- ----------
03/22/2013 08/14/2017 08/14/2013
答案 1 :(得分:1)
假设所有coulmns都是DATE
数据类型,您可以使用此
TO_DATE(TO_CHAR(EFFECTIVE_DATE, 'YYYY') || TO_CHAR(POINT_DATE, 'MMDD'), 'YYYYMMDD')
注意闰年!
答案 2 :(得分:1)
select to_char(effective_date, 'YYYY') || '-' || to_char(point_date, 'MM-DD')
然后将其解析为日期:
select to_date(to_char(effective_date, 'YYYY') || '-' || to_char(point_date, 'MM-DD'), 'YYYY-MM-DD')
注意:2月29日你可能要小心。