【问题标题】:INVALID NUMBER ERROR WHIE USING TO_NUMBER使用 TO_NUMBER 时出现无效号码错误
【发布时间】:2023-02-23 16:32:07
【问题描述】:
SELECT TO_NUMBER(TO_CHAR( TO_DATE(SUBSTR(UPDATED_DATE,1,8),'DD/MM/RRRR'),'RRRR MM DD')) FROM tw_edu_infra_amenities;
SELECT TO_NUMBER(TO_CHAR( TO_DATE(SUBSTR(UPDATED_DATE,1,8),'DD/MM/RRRR'),'RRRRMMDD')) AS NEW_DATE FROM tw_edu_infra_amenities;
第一个查询不起作用,第二个查询只是通过删除 to_char.why 中日期格式的空格来工作?
【问题讨论】:
标签:
sql
oracle
oracle11g
oracle-sqldeveloper
【解决方案1】:
因为 - 当您应用格式模型 RRRR MM DD 时 - 它会产生诸如 2023 02 23 之类的值。如果将 TO_NUMBER 应用于它,则会出现错误:
SQL> select to_number('2023 02 23') result from dual;
select to_number('2023 02 23') result from dual
*
ERROR at line 1:
ORA-01722: invalid number
格式模型中没有空格,值为20230223能转换为有效数字:
SQL> select to_number('20230223') result from dual;
RESULT
----------
20230223
SQL>
【解决方案2】:
根据我的理解,您需要的是,我认为您应该使用 extract 函数。
select to_char(extract(year from date_updated))||' '||
to_char(extract(month from date_updated),'00')||' '||
to_char(extract(day from date_updated),'00')
from x_table;