oracle 转换日期从'300520231644'到'30/05/2023 16:44'

fkaflof6  于 2023-06-05  发布在  Oracle
关注(0)|答案(3)|浏览(281)

如何将字符串'300520231644'转换为日期30/05/2023 16:44?
我尝试使用下面的代码:

SELECT to_date('3005231429', 'dd/mm/yyyy hh:mi:ss') FROM dual;
xienkqul

xienkqul1#

如果你想要一个DATE的值,那么你需要使用YYYY来表示一个四位数的年份,使用HH24来表示一个24小时制的小时:

SELECT TO_DATE('3005231429', 'DDMMYYYYHH24MI') FROM DUAL;

然后,您使用的客户端应用程序将使用其设置的任何默认日期格式显示日期,并且可能选择不显示日期的时间组件(但是,这并不意味着时间组件不存在,它只是不显示)。
对于SQL*Plus和SQL Developer(可能还有其他),使用NLS_DATE_FORMAT作为显示日期的默认格式,您可以使用以下命令更改应用程序显示日期的方式:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

或者,对于您所需的格式:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI';

然后运行查询。对于其他客户端应用程序,您将需要查阅其文档并将应用程序中的首选项/设置更新为所需的格式。
如果您希望值为格式化字符串(而不是DATE数据类型),则在日期值上使用TO_CHAR

SELECT TO_CHAR(
         TO_DATE('3005231429', 'DDMMYYYYHH24MI'),
         'DD/MM/YYYY HH24:MI'
       )
FROM   DUAL;
laik7k3q

laik7k3q2#

您可以使用TO_TIMESTAMP将字符串转换为datetime,然后使用TO_CHAR将datetime转换为所需的格式:

SELECT to_char(TO_TIMESTAMP('3005231429', 'ddmmyyHH24mi'), 'dd/mm/yyyy HH24:mi') FROM dual;

Demo here

pcrecxhr

pcrecxhr3#

我们可以在这里对捕获组使用REGEXP_REPLACE()

SELECT REGEXP_REPLACE('300520231644',
                      '([0-9]{2})([0-9]{2})([0-9]{4})([0-9]{2})([0-9]{2})',
                      '\1/\2/\3 \4:\5')
FROM dual;

-- 30/05/2023 16:44

Demo

相关问题