如何在SQL中从混合字符串转换日期时间值为指定格式
SQL实现字符串提取并转换为指定日期格式
以下针对常见SQL数据库给出解决方案,核心思路是先提取字符串中的日期时间片段,再转换为MM/DD/YYYY格式的日期值:
1. SQL Server
SELECT FORMAT( CAST(RIGHT(your_column, LEN(your_column) - CHARINDEX(':', your_column, CHARINDEX(':', your_column, CHARINDEX(':', your_column, CHARINDEX(':', your_column, CHARINDEX(':', your_column, 1)+1)+1)+1)+1)) AS DATETIME), 'MM/dd/yyyy' ) AS formatted_date FROM your_table;
通过多次嵌套CHARINDEX定位最后一个冒号的位置,截取冒号后的日期时间内容,转换为DATETIME类型后用FORMAT输出指定格式。
若使用SQL Server 2016及以上版本,也可通过正则简化:
SELECT FORMAT( CAST(REGEXP_SUBSTR(your_column, ':[0-9/]+ [0-9:]+ [APM]+$', 1, 1, '', 1) AS DATETIME), 'MM/dd/yyyy' ) AS formatted_date FROM your_table;
2. MySQL
SELECT DATE_FORMAT( STR_TO_DATE(SUBSTRING_INDEX(your_column, ':', -1), '%m/%d/%Y %h:%i:%s %p'), '%m/%d/%Y' ) AS formatted_date FROM your_table;
用SUBSTRING_INDEX直接截取最后一个冒号后的内容,通过STR_TO_DATE转换为日期类型,再用DATE_FORMAT格式化输出目标样式。
3. Oracle
SELECT TO_CHAR( TO_DATE(REGEXP_SUBSTR(your_column, ':\d+/\d+/\d+ \d+:\d+:\d+ [APM]+$', 1, 1, NULL, 2), 'MM/DD/YYYY HH:MI:SS AM'), 'MM/DD/YYYY' ) AS formatted_date FROM your_table;
通过REGEXP_SUBSTR提取冒号后的日期时间片段,TO_DATE转换为日期类型,最后用TO_CHAR输出指定格式。
4. PostgreSQL
SELECT TO_CHAR( TO_TIMESTAMP(SUBSTRING(your_column FROM ':\d+/\d+/\d+ \d+:\d+:\d+ [APM]+$')::TEXT, 'MM/DD/YYYY HH:MI:SS AM'), 'MM/DD/YYYY' ) AS formatted_date FROM your_table;
用SUBSTRING配合正则提取目标内容,TO_TIMESTAMP转换为时间戳类型,再通过TO_CHAR格式化日期。
内容的提问来源于stack exchange,提问作者Nemil
相关产品推荐
相关产品推荐

