繁体   English   中英

Oracle SQL从零件创建日期

[英]Oracle SQL Create Date from Parts

我在名为“ EFFECTIVE_DATE”和“ POINT_DATE”的数据库中有两个日期字段

如何创建一个新的日期字段,其中的日期由“ EFFECTIVE_DATE”年,“ POINT_DATE”月和“ POINT_DATE”日组成?

我通常会使用Datefromparts,但这是Oracle数据库而不是Microsoft

亲切的问候

这是使用ADD_MONTHSEXTRACT(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM