将日期转换为另一种格式时数字无效

Invalid number when converting a date to another format

我有这个查询,我正在尝试将下面查询中提到的两列的所有日期格式化为提到的格式:

SELECT
    TO_DATE(TO_CHAR(timeone,'YYYY-MM-DD HH:MI PM'),'DD-MM-YYYY HH:MIPM'), 
    TO_DATE(TO_CHAR(timetwo,'YYYY-MM-DD HH:MI PM'),'DD-MM-YYYY HH:MIPM')
FROM
    my_date_table
WHERE daywork = '28-MAY-2021';

并且我想将结果从 timeone 和 timetwo 转换为另一种日期格式 DD-MM-YYYY HH:MIPM 但是当我 运行 查询时我得到了无效的数字。我的 table 中 timeone 和 timetwo 列的数据类型是 date

当我运行不带格式的查询时,结果为:

我哪里错了?欢迎所有替代方案和解决方案

The datatype of the timeone and timetwo columns in my table are date

错误表明情况并非如此;它们似乎是字符串。作为日期,这会起作用:

SELECT
    TO_CHAR(CAST(TIMESTAMP '2021-05-28 07:34:00' AS DATE),'YYYY-MM-DD HH:MI PM')
FROM
    dual

TO_CHAR(CAST(TIMESTAMP'2021-05-2807:34:00'ASDATE),'YYYY-MM-DDHH:MIPM')
----------------------------------------------------------------------
2021-05-28 07:34 AM

但是作为一个字符串,它会得到你看到的错误:

SELECT
    TO_CHAR('2021-05-28 07:34:00','YYYY-MM-DD HH:MI PM')
FROM
    dual

ORA-01722: invalid number

因此,您实际上是在尝试将日期的一种字符串表示形式转换为不同格式的字符串表示形式。为此,您需要将内部函数调用设为 to_date(),并将外部函数调用设为 to_char() - 您的方法错了:

SELECT
    TO_CHAR(TO_DATE(timeone,'YYYY-MM-DD HH24:MI:SS'),'DD-MM-YYYY HH:MIPM') as convertedone, 
    TO_CHAR(TO_DATE(timetwo,'YYYY-MM-DD HH24:MI:SS'),'DD-MM-YYYY HH:MIPM') as convertedtwo
FROM
    my_date_table
WHERE daywork = date '2021-05-28'

CONVERTEDONE       CONVERTEDTWO
------------------ ------------------
28-05-2021 07:34AM 28-05-2021 03:30PM
28-05-2021 07:04AM 28-05-2021 07:04AM

to-date() 调用的格式模型也必须匹配实际的字符串值,因此我已将其更改为 'YYYY-MM-DD HH24:MI:SS''28-MAY-2021' 也是一个字符串而不是日期,所以 - 假设它确实是一个日期字段 - 我已将其更改为日期文字。您也可以在该字符串值上使用 to_date(),但使用文字更容易(如果您提供月份名称,那么您也应该指定日期语言)。

db<>fiddle.