如何在SQL查询中将datetime转字符串?含PHP strtotime类比示例
嘿,这两个问题都是SQL里处理日期时间时的高频需求,我按不同主流数据库给你拆解说明,毕竟不同SQL方言的语法差异还不小:
1. 将Datetime类型转换为字符串格式
核心思路是用数据库自带的格式化函数,指定你想要的输出格式即可:
- MySQL/MariaDB:用
DATE_FORMAT()函数,格式符和PHP的date()函数逻辑很像-- 转成"YYYY-MM-DD HH:MM:SS"标准格式 SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS formatted_date FROM your_table; -- 转成中文风格日期 SELECT DATE_FORMAT(created_at, '%Y年%m月%d日 %H:%i') AS cn_formatted_date FROM your_table; - PostgreSQL:用
TO_CHAR()函数,格式符是PostgreSQL特有的规则SELECT TO_CHAR(created_at, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM your_table; -- 转成带星期的长格式 SELECT TO_CHAR(created_at, 'FMDay, DD FMMonth YYYY') AS long_formatted_date FROM your_table; - SQL Server:可以用
CONVERT()(兼容性强)或者FORMAT()(自定义更灵活但性能稍弱)-- CONVERT用预定义格式码,120对应"YYYY-MM-DD HH:MI:SS" SELECT CONVERT(VARCHAR(20), created_at, 120) AS formatted_date FROM your_table; -- FORMAT支持和.NET一致的自定义格式字符串 SELECT FORMAT(created_at, 'yyyy-MM-dd HH:mm:ss') AS formatted_date FROM your_table; - Oracle:用
TO_CHAR()函数,格式符和MySQL有细微差异SELECT TO_CHAR(created_at, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM your_table; -- 转成带中文标识的日期 SELECT TO_CHAR(created_at, 'YYYY"年"MM"月"DD"日"') AS cn_formatted_date FROM your_table;
2. 实现类似PHP strtotime()的功能
PHP的strtotime()核心是把文本格式的日期时间转成时间戳或Datetime对象,SQL里对应的是字符串转Datetime类型,部分数据库还支持直接转成UNIX时间戳:
- MySQL/MariaDB:用
STR_TO_DATE()转成Datetime,UNIX_TIMESTAMP()转成时间戳-- 字符串转Datetime类型 SELECT STR_TO_DATE('2024-05-20 14:30:00', '%Y-%m-%d %H:%i:%s') AS parsed_datetime; -- 直接转成秒级UNIX时间戳 SELECT UNIX_TIMESTAMP('2024-05-20') AS timestamp_sec; - PostgreSQL:用
TO_TIMESTAMP()转成Datetime,EXTRACT(EPOCH FROM ...)转时间戳SELECT TO_TIMESTAMP('2024-05-20 14:30:00', 'YYYY-MM-DD HH24:MI:SS') AS parsed_datetime; -- 转成秒级UNIX时间戳 SELECT EXTRACT(EPOCH FROM TO_TIMESTAMP('2024-05-20', 'YYYY-MM-DD')) AS timestamp_sec; - SQL Server:用
TRY_CONVERT()(转换失败返回NULL,更安全)转Datetime,用DATEDIFF()转时间戳-- 字符串转Datetime类型 SELECT TRY_CONVERT(DATETIME, '2024-05-20 14:30:00') AS parsed_datetime; -- 转成秒级UNIX时间戳 SELECT DATEDIFF(SECOND, '1970-01-01', TRY_CONVERT(DATETIME, '2024-05-20')) AS timestamp_sec; - Oracle:用
TO_DATE()转成Datetime,通过日期差值计算转成UNIX时间戳SELECT TO_DATE('2024-05-20 14:30:00', 'YYYY-MM-DD HH24:MI:SS') AS parsed_datetime; -- 转成秒级UNIX时间戳 SELECT CAST((TO_DATE('2024-05-20', 'YYYY-MM-DD') - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400 AS INTEGER) AS timestamp_sec;
内容的提问来源于stack exchange,提问作者Creative Developers
相关产品推荐
相关产品推荐

