如何将'YYYY_MM_DD_HH_MM_SS'格式的日期字符串转为标准日期时间格式
最优日期格式转换方案
针对存储为YYYY_MM_DD_HH_MM_SS格式的字符串日期,用数据库内置的日期解析+格式化函数是比LEFT/RIGHT拼接更高效、更可靠的方案——不仅代码更简洁,还能自动校验日期合法性,避免生成无效日期。以下是主流数据库的实现方式:
MySQL/MariaDB
先用STR_TO_DATE()将字符串解析为日期时间类型,再用DATE_FORMAT()输出目标格式:
SELECT DATE_FORMAT(STR_TO_DATE(your_date_field, '%Y_%m_%d_%H_%i_%s'), '%Y/%m/%d %H:%i:%s') AS formatted_date FROM your_table;
- 解析时
%Y_%m_%d_%H_%i_%s完全匹配原字符串的分隔符和格式 - 格式化时用
%Y/%m/%d %H:%i:%s输出目标样式 - 优势:遇到
2023_02_30这类无效日期会返回NULL,自动过滤脏数据
PostgreSQL
用TO_TIMESTAMP()解析字符串,再用TO_CHAR()格式化:
SELECT TO_CHAR(TO_TIMESTAMP(your_date_field, 'YYYY_MM_DD_HH24_MI_SS'), 'YYYY/MM/DD HH24:MI:SS') AS formatted_date FROM your_table;
HH24表示24小时制,MI代表分钟(避免和月份MM混淆)- 无效输入会返回错误或NULL(取决于数据库配置),确保数据合法性
SQL Server
推荐用TRY_CONVERT()做合法性校验,再用FORMAT()输出:
SELECT FORMAT(TRY_CONVERT(DATETIME, REPLACE(your_date_field, '_', ' '), 120), 'yyyy/MM/dd HH:mm:ss') AS formatted_date FROM your_table;
- 先用
REPLACE把下划线换成空格,得到YYYY MM DD HH MM SS格式,再按ODBC标准(样式120)解析为日期 TRY_CONVERT对无效日期返回NULL,避免报错
如果确定数据无脏值,也可以用更简洁的替换拼接:
SELECT REPLACE(REPLACE(LEFT(your_date_field, 10), '_', '/') + ' ' + RIGHT(your_date_field, 8), '_', ':') AS formatted_date FROM your_table;
通用替换方案(所有数据库适用)
如果数据库没有日期解析函数,用多次REPLACE比嵌套LEFT/RIGHT更易读:
-- 分步替换分隔符:先处理日期部分,再分隔日期时间,最后处理时间部分 SELECT REPLACE(REPLACE(REPLACE(your_date_field, '_', '/', 2), '_', ' ', 1), '_', ':') AS formatted_date FROM your_table;
- 注:部分数据库不支持替换次数参数,可调整为:
SELECT REPLACE(REPLACE(CONCAT(LEFT(your_date_field, 10), ' ', RIGHT(your_date_field, 8)), '_', '/'), '/', ':', 3) FROM your_table;
内容的提问来源于stack exchange,提问作者Owen Gagnon
相关产品推荐
相关产品推荐

