我正在尝试将日期时间列的格式从“YYYY-MM-DD HH-MM-SS”更改为“YYYY-DD-MM HH-MM-SS”input:2023-04-12 07:15:10在select语句中使用的脚本:
TO_CHAR(TO_DATE(a.time_stamp, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-DD-MM HH24:MI:SS') as CHANGE_TIME
输出:0012-23-04 00:00:00所需输出:2023-12-04 07:15:10
31moq8wy1#
这是因为您将to_date函数应用于已经是日期的值。样本数据:
to_date
SQL> WITH 2 test (time_stamp) 3 AS 4 (SELECT TO_DATE ('2023-04-12 07:15:10', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL) 5 --
Query;我相信你应该使用第7行中的表达式:
6 SELECT TO_CHAR (TO_DATE (a.time_stamp, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-DD-MM HH24:MI:SS') you, 7 TO_CHAR (time_stamp, 'yyyy-dd-mm hh24:mi:ss') me 8 FROM test a; YOU ME ------------------- ------------------- 0012-23-04 00:00:00 2023-12-04 07:15:10 SQL>
u0njafvf2#
它看起来像你正在使用Oracle SQL,你的脚本的问题是你正在使用TO_DATE函数,它将字符串转换为日期。必须使用TO_CHAR函数。前:-
TO_DATE
TO_CHAR
SELECT TO_CHAR(a.time_stamp,'YYYY-DD-MM HH24:MI:SS')as CHANGE_TIME FROM your_table;
pgky5nke3#
在Oracle中,DATE是一种二进制数据类型,由7个字节组成,表示:世纪、世纪年、月、日、小时、分钟和秒。它总是有这7个组件,它从来没有存储任何特定的人类可读格式(它是二进制)。我正在尝试更改DATE列的格式你不能,它没有任何格式,你可以改变。我想用不同的方式展示它然后使用TO_CHAR并将DATE的值直接传递给它(永远不要在已经是DATE的东西上使用TO_DATE;在最好的情况下,它什么也不做,在最坏的情况下,它要么引发一个异常,要么给你一个意想不到的结果):
DATE
TO_CHAR(a.time_stamp, 'YYYY-DD-MM HH24:MI:SS') as CHANGE_TIME
为什么TO_CHAR(TO_DATE(a.time_stamp, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-DD-MM HH24:MI:SS')不工作?TO_DATE接受一个字符串作为第一个参数,你传递给它一个DATE,所以:
TO_CHAR(TO_DATE(a.time_stamp, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-DD-MM HH24:MI:SS')
DD-MM-RR
YYYY-MM-DD HH24:MI:SS
3条答案
按热度按时间31moq8wy1#
这是因为您将
to_date
函数应用于已经是日期的值。样本数据:
Query;我相信你应该使用第7行中的表达式:
u0njafvf2#
它看起来像你正在使用Oracle SQL,你的脚本的问题是你正在使用
TO_DATE
函数,它将字符串转换为日期。必须使用TO_CHAR
函数。前:-
pgky5nke3#
在Oracle中,
DATE
是一种二进制数据类型,由7个字节组成,表示:世纪、世纪年、月、日、小时、分钟和秒。它总是有这7个组件,它从来没有存储任何特定的人类可读格式(它是二进制)。我正在尝试更改
DATE
列的格式你不能,它没有任何格式,你可以改变。
我想用不同的方式展示它
然后使用
TO_CHAR
并将DATE
的值直接传递给它(永远不要在已经是DATE
的东西上使用TO_DATE
;在最好的情况下,它什么也不做,在最坏的情况下,它要么引发一个异常,要么给你一个意想不到的结果):为什么
TO_CHAR(TO_DATE(a.time_stamp, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-DD-MM HH24:MI:SS')
不工作?TO_DATE
接受一个字符串作为第一个参数,你传递给它一个DATE
,所以:DATE
隐式转换为字符串;然后1.使用
TO_DATE
将其显式转换回DATE
;然后1.使用
TO_CHAR
将其显式转换为字符串。第一步是问题发生的地方,因为隐式转换中的格式模型似乎是
DD-MM-RR
,并且与第二步中的YYYY-MM-DD HH24:MI:SS
模型不匹配,因此您的日期在交换日期和年份(并从年份中删除世纪)时变得混乱。