ORA-01843: 不是有效月份 - 但月份格式是什么?甲骨文 11g
ORA-01843: not a valid month - but what month format? Oracle 11g
我想知道除 MM 、 MONTH 或 MON 之外还有哪些 MONTH 格式。
当下面的查询运行时,它给我一个错误 ORA-01843: not a valid month 我可以理解为什么,因为服务器从月份“07”中删除了“0”并只留下数字“7”,所以 MM格式不正确。
但它是哪一个?
select to_char(to_date(START_DATE,'MM/DD/YYYY '), 'DD-MM-YYYY')
from PER_ALL_PEOPLE_F
WHERE person_id=12345
START_DATE 列是 DATE TYPE,它提供的结果如下:7/17/2012 .
您认为月份的个位数 7
是个问题的假设是不正确的; Oracle 通常非常灵活,很乐意使用 MM
模型解析一位数月份:
select to_date('7/17/2012', 'MM/DD/YYYY') from dual;
TO_DATE('7/17/2012'
-------------------
2012-07-17 00:00:00
如果 start_date
已经是 DATE
类型,那么您不应该为它调用 to_date()
。您正在使用 NLS_DATE_FORMAT moodel 对字符串进行隐式转换,然后返回到具有指定格式的日期。所以你真的在做:
select to_char(to_date(to_char(START_DATE, <NLS_DATE_FORMAT>),
'MM/DD/YYYY '), 'DD-MM-YYYY')
如果您的 NLS_DATE_FORMAT 不是 MM/DD/YYYY
,例如DD-MON-YYYY
,然后你会得到至少一些值的 ORA-1843 错误。
您可以通过以下方式查看:
select to_date(date '2014-01-16', 'MM/DD/YYYY') from dual;
或扩展:
select to_date(to_char(date '2014-01-16', 'DD-MON-YYYY'),
'MM/DD/YYYY') from dual;
日期没有任何特定格式,它们以内部表示形式存储,然后转换为格式化字符串以供显示。您说您的日期显示为 7/12/2012,但考虑到您看到的错误,您的客户似乎正在处理该格式,并且它与会话无关 NLS_DATE_FORMAT.
您只需要做:
select to_char(START_DATE, 'DD-MM-YYYY')
我想知道除 MM 、 MONTH 或 MON 之外还有哪些 MONTH 格式。 当下面的查询运行时,它给我一个错误 ORA-01843: not a valid month 我可以理解为什么,因为服务器从月份“07”中删除了“0”并只留下数字“7”,所以 MM格式不正确。 但它是哪一个?
select to_char(to_date(START_DATE,'MM/DD/YYYY '), 'DD-MM-YYYY')
from PER_ALL_PEOPLE_F
WHERE person_id=12345
START_DATE 列是 DATE TYPE,它提供的结果如下:7/17/2012 .
您认为月份的个位数 7
是个问题的假设是不正确的; Oracle 通常非常灵活,很乐意使用 MM
模型解析一位数月份:
select to_date('7/17/2012', 'MM/DD/YYYY') from dual;
TO_DATE('7/17/2012'
-------------------
2012-07-17 00:00:00
如果 start_date
已经是 DATE
类型,那么您不应该为它调用 to_date()
。您正在使用 NLS_DATE_FORMAT moodel 对字符串进行隐式转换,然后返回到具有指定格式的日期。所以你真的在做:
select to_char(to_date(to_char(START_DATE, <NLS_DATE_FORMAT>),
'MM/DD/YYYY '), 'DD-MM-YYYY')
如果您的 NLS_DATE_FORMAT 不是 MM/DD/YYYY
,例如DD-MON-YYYY
,然后你会得到至少一些值的 ORA-1843 错误。
您可以通过以下方式查看:
select to_date(date '2014-01-16', 'MM/DD/YYYY') from dual;
或扩展:
select to_date(to_char(date '2014-01-16', 'DD-MON-YYYY'),
'MM/DD/YYYY') from dual;
日期没有任何特定格式,它们以内部表示形式存储,然后转换为格式化字符串以供显示。您说您的日期显示为 7/12/2012,但考虑到您看到的错误,您的客户似乎正在处理该格式,并且它与会话无关 NLS_DATE_FORMAT.
您只需要做:
select to_char(START_DATE, 'DD-MM-YYYY')