如何将字符串'300520231644'转换为30/05/2023 16:44格式日期?
解决Oracle SQL字符串转指定日期格式的问题
你的问题核心是格式模型与输入字符串不匹配,且混淆了to_date和to_char的用途:
to_date负责将字符串转换为Oracle的日期类型,格式模型必须严格对应输入字符串的结构;- 要输出
30/05/2023 16:44这种带分隔符的字符串格式,需要用to_char将日期类型转换为指定格式的文本。
正确实现代码
针对目标字符串'300520231644'(结构为:2位日+2位月+4位年+24小时制2位小时+2位分钟),正确的SQL语句如下:
SELECT TO_CHAR(TO_DATE('300520231644', 'ddmmyyyyhh24mi'), 'dd/mm/yyyy hh24:mi') AS formatted_datetime FROM dual;
代码说明
字符串转日期:
TO_DATE('300520231644', 'ddmmyyyyhh24mi')中的格式模型ddmmyyyyhh24mi完全匹配输入结构:dd:2位日mm:2位月yyyy:4位年hh24:24小时制的2位小时mi:2位分钟
日期转指定格式字符串:
TO_CHAR(..., 'dd/mm/yyyy hh24:mi')将日期类型转换为带分隔符的目标格式,确保输出固定为30/05/2023 16:44样式,不受会话NLS参数影响。
针对你示例中'3005231429'的适配
如果输入字符串是2位年份(如'3005231429'对应2023年5月30日14:29),只需将格式模型的年份部分改为rr(自动处理世纪):
SELECT TO_CHAR(TO_DATE('3005231429', 'ddmmrrhhnn'), 'dd/mm/yyyy hh24:mi') AS formatted_datetime FROM dual;
内容的提问来源于stack exchange,提问作者user19711048
相关产品推荐
相关产品推荐

