You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:57:10