[英]Oracle SQL Create Date from Parts
我在名为“ EFFECTIVE_DATE”和“ POINT_DATE”的数据库中有两个日期字段
如何创建一个新的日期字段,其中的日期由“ EFFECTIVE_DATE”年,“ POINT_DATE”月和“ POINT_DATE”日组成?
我通常会使用Datefromparts,但这是Oracle数据库而不是Microsoft
亲切的问候
这是使用ADD_MONTHS
和EXTRACT(YEAR FROM ....)
。 您只需添加或减去所需的月数(由于只更改年份,所以总是12的倍数)。 与TO_CHAR
/ TO_DATE
解决方案不同,此方法可处理leap日(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
假设所有同语均为DATE
数据类型,则可以使用此一种
TO_DATE(TO_CHAR(EFFECTIVE_DATE, 'YYYY') || TO_CHAR(POINT_DATE, 'MMDD'), 'YYYYMMDD')
注意leap年!
嗯。 。 。 这将以YYYY-MM-DD格式生成一个漂亮的字符串:
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日。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.