oracle 在SQL中更改日期时间格式

pftdvrlh  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(201)

我正在尝试将日期时间列的格式从“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

31moq8wy

31moq8wy1#

这是因为您将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>
u0njafvf

u0njafvf2#

它看起来像你正在使用Oracle SQL,你的脚本的问题是你正在使用TO_DATE函数,它将字符串转换为日期。必须使用TO_CHAR函数。
前:-

SELECT TO_CHAR(a.time_stamp,'YYYY-DD-MM HH24:MI:SS')as CHANGE_TIME FROM your_table;
pgky5nke

pgky5nke3#

在Oracle中,DATE是一种二进制数据类型,由7个字节组成,表示:世纪、世纪年、月、日、小时、分钟和秒。它总是有这7个组件,它从来没有存储任何特定的人类可读格式(它是二进制)。
我正在尝试更改DATE列的格式
你不能,它没有任何格式,你可以改变。
我想用不同的方式展示它
然后使用TO_CHAR并将DATE的值直接传递给它(永远不要在已经是DATE的东西上使用TO_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,所以:

  1. Oracle正在“帮助”将DATE隐式转换为字符串;然后
    1.使用TO_DATE将其显式转换回DATE;然后
    1.使用TO_CHAR将其显式转换为字符串。
    第一步是问题发生的地方,因为隐式转换中的格式模型似乎是DD-MM-RR,并且与第二步中的YYYY-MM-DD HH24:MI:SS模型不匹配,因此您的日期在交换日期和年份(并从年份中删除世纪)时变得混乱。

相关问题