如何修改MySQL datetime列的时间显示格式去除毫秒部分
MySQL时间字段去掉毫秒、仅保留到秒的实现方案
根据你的需求,分两种使用场景提供对应方法,你可以按需选择:
1. 仅查询时展示秒级精度(不修改表内原始数据)
这种方案不需要改动表结构,只需要在查询时对字段做格式化处理即可,适合需要保留原始毫秒数据、仅展示时去掉后缀的场景。
- 方法1:用
DATE_FORMAT函数格式化输出(通用方案,字段为时间类型、字符串类型都可用)
SELECT TagName, DATE_FORMAT(`DateTime`, '%Y-%m-%d %H:%i:%s') AS `DateTime`, Value FROM 你的实际表名;
执行后返回的DateTime字段会直接截断毫秒部分,输出格式和你预期的2022-07-05 12:01:40完全一致。
- 方法2:类型转换(适合字段本身是DATETIME(3)/DATETIME(6)等带小数秒精度的原生时间类型)
SELECT TagName, CAST(`DateTime` AS DATETIME(0)) AS `DateTime`, Value FROM 你的实际表名;
这种方式返回的结果仍是时间类型,后续做时间排序、区间计算时比字符串格式更方便。注意:CAST转换时会对毫秒部分做四舍五入,比如12:01:40.844会被转为12:01:41,如果需要直接截断请用方法1。
- 方法3:字符串截取(适合字段是VARCHAR/TEXT等字符串类型存储的场景)
你的示例中时间字符串格式固定,前19位刚好是秒级精度的内容,直接截取性能更高:
SELECT TagName, LEFT(`DateTime`, 19) AS `DateTime`, Value FROM 你的实际表名;
2. 永久修改表配置,自动保留秒级精度
如果你后续不需要存储毫秒数据,可以直接修改字段精度,之后所有写入、查询都会自动保留到秒,不用每次查询单独写处理函数。
注意:直接修改字段精度时MySQL默认会对毫秒做四舍五入,如果需要强制截断毫秒,先执行更新语句处理存量数据:
UPDATE 你的实际表名 SET `DateTime` = DATE_FORMAT(`DateTime`, '%Y-%m-%d %H:%i:%s');
处理完存量数据后,执行字段修改语句即可(注意字段约束要和原字段保持一致,比如原字段是NOT NULL、有默认值的话要同步带上,不要直接照搬语句):
ALTER TABLE 你的实际表名 MODIFY COLUMN `DateTime` DATETIME(0);
内容的提问来源于stack exchange,提问作者Gracella Q Sumarlin
相关产品推荐
相关产品推荐

