MySQL TIME(3)类型数据查询结果去除前导零的方法
解决方法
针对不同数据库,给你几个可行的实现方案:
MySQL
- 方法一:用
TIME_TO_SEC()直接转成带毫秒的秒数
这个函数会把SELECT TIME_TO_SEC(your_time_column) FROM some_table;00:00:07.763直接转换成数值型的7.763,输出就是你要的格式。 - 方法二:字符串截取,取最后一个冒号后的内容
不管时间字段里有没有小时、分钟部分,只要最后一段是秒+毫秒,这个方法都能准确提取目标内容。SELECT SUBSTRING_INDEX(your_time_column, ':', -1) FROM some_table;
PostgreSQL
- 方法一:提取时间的总秒数(含毫秒)
SELECT EXTRACT(EPOCH FROM your_time_column) FROM some_table;EXTRACT(EPOCH FROM ...)会把时间间隔转换成总秒数,结果就是7.763这样的数值。 - 方法二:字符串分割截取
把时间转成字符串后,按冒号分割取第三段,直接得到SELECT SPLIT_PART(your_time_column::TEXT, ':', 3) FROM some_table;7.763。
SQL Server
- 方法一:计算带毫秒的总秒数
分别提取秒和毫秒,把毫秒转成小数后相加,得到带三位小数的秒数。SELECT DATEPART(SECOND, your_time_column) + DATEPART(MILLISECOND, your_time_column)/1000.0 AS formatted_time FROM some_table; - 方法二:字符串截取最后一段
先把时间转成字符串,找到第二个冒号的位置,再截取后面的内容,得到目标格式。SELECT SUBSTRING(CONVERT(VARCHAR(20), your_time_column), CHARINDEX(':', CONVERT(VARCHAR(20), your_time_column), CHARINDEX(':', CONVERT(VARCHAR(20), your_time_column)) + 1) + 1, 10) AS formatted_time FROM some_table;
为什么TRIM函数没用?
TRIM只能移除字符串首尾的指定字符,而你需要去掉的是中间的00:00:前缀,这种带分隔符的前缀不在TRIM的处理范围内,所以得用上面的字符串截取或数值转换方法。
内容的提问来源于stack exchange,提问作者Quark
相关产品推荐
相关产品推荐

