如何从MySQL的timestamp类型字段中仅提取日期和小时?
MySQL提取timestamp字段日期+小时的实现方法
你可以根据自己的MySQL版本和使用场景选择以下任意一种方案,都能得到2022-07-13 07格式的结果:
推荐方案:
DATE_FORMAT函数(全版本兼容)
用MySQL内置的日期格式化函数直接指定输出规则,是最稳妥、适配性最强的写法,MySQL 5.x、8.x全版本都支持:SELECT DATE_FORMAT(`Date`, '%Y-%m-%d %H') AS format_time FROM 你的表名;格式符说明:
%Y对应4位年份、%m对应2位补零月份、%d对应2位补零日期、%H对应24小时制的2位补零小时,输出格式完全匹配需求。简洁写法:
LEFT字符串截取
timestamp类型在参与字符串运算时会自动转成YYYY-MM-DD HH:MM:SS的固定长度格式,前13位刚好是「年-月-日 小时」,直接截取即可:SELECT LEFT(`Date`, 13) AS format_time FROM 你的表名;注意:这个写法仅适用于字段类型是标准timestamp、datetime的场景,如果字段是字符串存储的时间,要先确认所有值格式统一再用,避免截断出错。
高版本方案:
DATE_TRUNC时间截断(MySQL 8.0+支持)
8.0及以上版本的MySQL支持直接把时间截断到指定精度,截断到小时后,分、秒会自动归零为00:00:00,如果后续还要做时间计算可以直接用截断后的timestamp值,只需要字符串输出的话套一层DATE_FORMAT即可:-- 直接得到小时精度的timestamp值:2022-07-13 07:00:00 SELECT DATE_TRUNC('hour', `Date`) AS hour_ts FROM 你的表名; -- 转成目标字符串格式 SELECT DATE_FORMAT(DATE_TRUNC('hour', `Date`), '%Y-%m-%d %H') AS format_time FROM 你的表名;
扩展用法:如果需要按小时做数据统计,以上写法可以直接放到
GROUP BY子句中使用,示例:SELECT DATE_FORMAT(`Date`, '%Y-%m-%d %H') AS stat_hour, COUNT(*) AS record_count FROM target_table GROUP BY stat_hour;
内容的提问来源于stack exchange,提问作者GQS
相关产品推荐
相关产品推荐

