Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将日期转换为其他格式时,数字无效_Sql_Oracle_Date_Oracle Sqldeveloper_Oracle19c - Fatal编程技术网

Sql 将日期转换为其他格式时,数字无效

Sql 将日期转换为其他格式时,数字无效,sql,oracle,date,oracle-sqldeveloper,oracle19c,Sql,Oracle,Date,Oracle Sqldeveloper,Oracle19c,我有这个查询,我正在尝试将以下查询中提到的两列的所有日期格式化为所提到的格式: 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';

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

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-yyyyy HH:MIPM
,但是当我运行查询时,我得到了无效的数字。我的表中timeone和timetwo列的数据类型是date

当我在没有格式化的情况下运行查询时,结果是:

我哪里出错了?。欢迎所有备选方案和解决办法

我的表中timeone和timetwo列的数据类型是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
因此,您实际上是在尝试将日期的一个字符串表示形式转换为不同格式的字符串表示形式。为此,您需要将内部函数调用设置为
到_date()
,将外部函数调用设置为
到_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()
,但使用文本更容易(如果您提供了月份名称,那么您也应该指定日期语言)


.

日期是使用内部格式存储的,因此不清楚您想要保存什么。您似乎只是想将日期转换为字符串。@GordonLinoff嗯,我只是想更改图片中结果的格式,所以查询就是我用来尝试将格式更改为所需格式的。因此,带有结果的图像是YYYY-MM-DD HH:MI:SS,但我希望它是DD-MM-yyy HH:MI pm您的timeone和timetwo列是什么数据类型?如果它们是字符串,那么(a)这不是一个好主意,(b)您的
to_date()
to_char()
的方式是错误的。正如您在上面看到的,我提到的数据类型是dateseems,就像您只需要
to_char(timeone,'DD-MM-YYYY HH:MI-PM')
一样。这将Oracle日期值转换为字符串,格式为
'DD-MM-YYYY HH:MI-PM'
。或者,由于您标记了Oracle SQL Developer,您可以进入首选项的NLS部分,并将其设置为日期的显示格式。是,这是正确的