如何用SQL处理Intime字段,去除小数部分得到'17:44:58'
问题描述
现有Table1表的结构及数据如下:
| Intime |
|---|
| 17:44:58.2555247 |
需要去除Intime字段值中的2555247部分(即去掉小数点及之后的内容),得到结果17:44:58,求SQL实现方案。
解决方案
以下是不同数据库环境下的可行写法:
1. 字符串截取法(通用优先)
通过定位小数点位置,截取其之前的字符内容:
- MySQL/MariaDB:使用
SUBSTRING_INDEX按小数点分割取第一部分SELECT SUBSTRING_INDEX(Intime, '.', 1) AS trimmed_intime FROM Table1; - SQL Server:结合
LEFT和CHARINDEX定位截取
若存在无小数点的记录,可加判断避免报错:SELECT LEFT(Intime, CHARINDEX('.', Intime) - 1) AS trimmed_intime FROM Table1;SELECT CASE WHEN CHARINDEX('.', Intime) > 0 THEN LEFT(Intime, CHARINDEX('.', Intime) - 1) ELSE Intime END AS trimmed_intime FROM Table1; - PostgreSQL:用
LEFT和POSITION函数实现
兼容无小数点记录的写法:SELECT LEFT(Intime, POSITION('.' IN Intime) - 1) AS trimmed_intime FROM Table1;SELECT CASE WHEN POSITION('.' IN Intime) > 0 THEN LEFT(Intime, POSITION('.' IN Intime) - 1) ELSE Intime END AS trimmed_intime FROM Table1;
2. 时间类型转换法(适用于合法时间格式)
如果Intime是标准时间格式字符串,可先转为时间类型再格式化输出:
- MySQL:
SELECT DATE_FORMAT(STR_TO_DATE(Intime, '%H:%i:%s.%f'), '%H:%i:%s') AS trimmed_intime FROM Table1; - SQL Server:
SELECT FORMAT(CONVERT(time, Intime), 'HH:mm:ss') AS trimmed_intime FROM Table1;
内容的提问来源于stack exchange,提问作者Smith
相关产品推荐
相关产品推荐

