Oracle SQL从零件创建日期

Oracle SQL从零件创建日期,sql,oracle,Sql,Oracle,我在数据库中有两个日期字段,分别是“生效日期”和“点日期” 如何创建新的日期字段,其中日期由“生效日期”的年份、“点日期”的月份和“点日期”的日期组成 我通常会使用Datefromparts,但这是一个Oracle数据库,而不是Microsoft数据库 善意的问候假设所有coulmn都是日期数据类型,您可以使用此类型 TO_DATE(TO_CHAR(EFFECTIVE_DATE, 'YYYY') || TO_CHAR(POINT_DATE, 'MMDD'), 'YYYYMMDD') 注意闰年

我在数据库中有两个日期字段,分别是“生效日期”和“点日期”

如何创建新的日期字段,其中日期由“生效日期”的年份、“点日期”的月份和“点日期”的日期组成

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


善意的问候

假设所有coulmn都是
日期
数据类型,您可以使用此类型

TO_DATE(TO_CHAR(EFFECTIVE_DATE, 'YYYY') || TO_CHAR(POINT_DATE, 'MMDD'), 'YYYYMMDD')

注意闰年

假设所有coulmn都是
DATE
数据类型,您可以使用此类型

TO_DATE(TO_CHAR(EFFECTIVE_DATE, 'YYYY') || TO_CHAR(POINT_DATE, 'MMDD'), 'YYYYMMDD')

注意闰年

嗯。这将生成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日你可能要小心了。

嗯。这将生成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日的情况。

这里有一种使用
添加月数
提取(年从….)
的方法。您只需添加或减去所需的月数(始终是12的倍数,因为您只更改年份)。与
TO_CHAR
/
TO_DATE
解决方案不同,这种方法处理闰日(2月29日)。另一方面,请注意,将日期从2003年2月28日更改为2012年将更改为2月29日(
ADD_MONTHS
将一个月的最后一天更改为结果月的最后一天)


这里有一种使用
ADD_MONTHS
EXTRACT(YEAR FROM…)
的方法。您只需添加或减去所需的月数(始终是12的倍数,因为您只更改年份)。与
TO_CHAR
/
TO_DATE
解决方案不同,这种方法处理闰日(2月29日)。另一方面,请注意,将日期从2003年2月28日更改为2012年将更改为2月29日(
ADD_MONTHS
将一个月的最后一天更改为结果月的最后一天)


也许有更优雅的方法,但是
到CHAR()
到日期()
应该可以。您还可以使用
EXTRACT()
。困难的部分是确保你不会以无效的日期结束,例如2月31日。
。您还可以使用
EXTRACT()
。最困难的部分是确保你不会以无效的日期结束,例如2月31日,还要小心6月31日之类的日期。@unrelated。我不知道6月31日这个产品会怎么样。我知道它将如何产生2017-02-29。我的错。当时,我想这只是从第二次约会开始的第二天。如果它需要一个有效的日期和月份,那么除了2/29场景外,这是可以的。并且要注意像6月31日这样的日期。@unrelated。我不知道6月31日这个产品会怎么样。我知道它将如何产生2017-02-29。我的错。当时,我想这只是从第二次约会开始的第二天。如果需要一个有效的日期和月份,那么除了2/29场景外,这是可以接受的。