Oracle11g oracle提供的MON-DD截止日期ORA-01839:日期对于指定月份无效
我们有一个如下查询:Oracle11g oracle提供的MON-DD截止日期ORA-01839:日期对于指定月份无效,oracle11g,to-date,Oracle11g,To Date,我们有一个如下查询: SELECT TO_DATE(CREATED_DATE_IN_CHAR,'MON-DD') FROM TABLE1 列中的数据格式与MON-DD相同 在执行上述查询时,我们得到ORA-01839:date对于指定的月份无效。 通过进一步分析,我们发现在字符中创建的日期有一个类似于'FEB-29'的值。因此,oracle正试图将“2月29日”转换为“2月29日”(当前年份为2017年),但该日期在2017年无效 是否可以使to_date函数采用闰年进行日期转换,而不是当前年
SELECT TO_DATE(CREATED_DATE_IN_CHAR,'MON-DD') FROM TABLE1
列中的数据格式与MON-DD相同
在执行上述查询时,我们得到ORA-01839:date对于指定的月份无效。
通过进一步分析,我们发现在字符中创建的日期有一个类似于'FEB-29'的值。因此,oracle正试图将“2月29日”转换为“2月29日”(当前年份为2017年),但该日期在2017年无效
是否可以使to_date函数采用闰年进行日期转换,而不是当前年份(2017年)
我们被困在这里。任何帮助或建议都将不胜感激 您不能使
to_date()
假定不同的年份,但您可以通过将该年份作为字符串的一部分传入来告诉它使用特定年份(闰年的任何年份)-只需连接一个固定值,并修改格式模型以匹配:
SELECT TO_DATE('2016-' || CREATED_DATE_IN_CHAR,'YYYY-MON-DD') FROM TABLE1
快速演示:
alter session set nls_date_format = 'YYYY-MM-DD'; -- for display only
with table1 (created_date_in_char) as (
select 'JAN-01' from dual
union all select 'FEB-29' from dual
union all select 'DEC-31' from dual
)
SELECT TO_DATE('2016-' || CREATED_DATE_IN_CHAR,'YYYY-MON-DD') FROM TABLE1;
TO_DATE('2
----------
2016-01-01
2016-02-29
2016-12-31
将创建的日期(或任何日期)仅存储为月和日,或将任何日期存储为字符串,这似乎很奇怪,也没有任何帮助;但这不是直接的问题…您不能让
to_date()
假设不同的年份,但您可以通过将该年份作为字符串的一部分传入来告诉它使用特定年份(闰年的任何年份)-只需连接一个固定值,并修改格式模型以匹配:
SELECT TO_DATE('2016-' || CREATED_DATE_IN_CHAR,'YYYY-MON-DD') FROM TABLE1
快速演示:
alter session set nls_date_format = 'YYYY-MM-DD'; -- for display only
with table1 (created_date_in_char) as (
select 'JAN-01' from dual
union all select 'FEB-29' from dual
union all select 'DEC-31' from dual
)
SELECT TO_DATE('2016-' || CREATED_DATE_IN_CHAR,'YYYY-MON-DD') FROM TABLE1;
TO_DATE('2
----------
2016-01-01
2016-02-29
2016-12-31
将创建的日期(或任何日期)仅存储为月和日,或将任何日期存储为字符串,这似乎很奇怪,也没有任何帮助;但这不是当前的问题…Hmmm…也许最好的办法是控制进入查询的日期输入。如果是从应用层完成的,例如Android或移动应用程序,您可以使用显示正确日历的小部件。@TimBiegeleisen感谢您的输入。但要求是从应用层(UI)以相同的格式获取日期。用户只能在UI中选择MON-DD。Hmmm…也许最好的办法是控制进入查询的日期输入。如果是从应用层完成的,例如Android或移动应用程序,您可以使用显示正确日历的小部件。@TimBiegeleisen感谢您的输入。但要求是从应用层(UI)以相同的格式获取日期。用户只能在UI中选择MON-DD。