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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:15:34