如何将字符串'300520231644'转换为日期30/05/2023 16:44?我尝试使用下面的代码:
'300520231644'
SELECT to_date('3005231429', 'dd/mm/yyyy hh:mi:ss') FROM dual;
xienkqul1#
如果你想要一个DATE的值,那么你需要使用YYYY来表示一个四位数的年份,使用HH24来表示一个24小时制的小时:
DATE
YYYY
HH24
SELECT TO_DATE('3005231429', 'DDMMYYYYHH24MI') FROM DUAL;
然后,您使用的客户端应用程序将使用其设置的任何默认日期格式显示日期,并且可能选择不显示日期的时间组件(但是,这并不意味着时间组件不存在,它只是不显示)。对于SQL*Plus和SQL Developer(可能还有其他),使用NLS_DATE_FORMAT作为显示日期的默认格式,您可以使用以下命令更改应用程序显示日期的方式:
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:
TO_CHAR
SELECT TO_CHAR( TO_DATE('3005231429', 'DDMMYYYYHH24MI'), 'DD/MM/YYYY HH24:MI' ) FROM DUAL;
laik7k3q2#
您可以使用TO_TIMESTAMP将字符串转换为datetime,然后使用TO_CHAR将datetime转换为所需的格式:
TO_TIMESTAMP
SELECT to_char(TO_TIMESTAMP('3005231429', 'ddmmyyHH24mi'), 'dd/mm/yyyy HH24:mi') FROM dual;
Demo here
pcrecxhr3#
我们可以在这里对捕获组使用REGEXP_REPLACE():
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
3条答案
按热度按时间xienkqul1#
如果你想要一个
DATE
的值,那么你需要使用YYYY
来表示一个四位数的年份,使用HH24
来表示一个24小时制的小时:然后,您使用的客户端应用程序将使用其设置的任何默认日期格式显示日期,并且可能选择不显示日期的时间组件(但是,这并不意味着时间组件不存在,它只是不显示)。
对于SQL*Plus和SQL Developer(可能还有其他),使用
NLS_DATE_FORMAT
作为显示日期的默认格式,您可以使用以下命令更改应用程序显示日期的方式:或者,对于您所需的格式:
然后运行查询。对于其他客户端应用程序,您将需要查阅其文档并将应用程序中的首选项/设置更新为所需的格式。
如果您希望值为格式化字符串(而不是
DATE
数据类型),则在日期值上使用TO_CHAR
:laik7k3q2#
您可以使用
TO_TIMESTAMP
将字符串转换为datetime,然后使用TO_CHAR
将datetime转换为所需的格式:Demo here
pcrecxhr3#
我们可以在这里对捕获组使用
REGEXP_REPLACE()
:Demo