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

如何使用trim和len函数格式化SQL中time类型的Intime列值?

问题描述

表1:

NameIntime
Paulsmith15:10:45.0486392

我知道可以用trim和len函数移除Name列的末尾字符(去掉'smith'),只显示'Paul'。那怎么对Intime列的时间值做类似操作,只显示前8个字符(时分秒部分)?

我的尝试

先用字符串测试时能得到预期结果:

SELECT SUBSTRING('15:10:45.0486392',1,len('15:10:45.0486392')-8) AS Intime 
FROM stuattrecordAM

输出为"15:10:45",符合要求。

但换成列名执行时出错:

SELECT SUBSTRING(Intime,1,len(Intime)-8) AS Intime 
FROM stuattrecordAM

遇到的问题

使用Intime列名时触发错误:

Argument data type time is invalid for argument 1 of substring function.
(参数数据类型time对substring函数的参数1无效。)

解决方法

错误核心是Intime列是time数据类型,而SUBSTRING仅支持字符串类型,因此需要先转换类型,或用更适合的时间格式化方案:

方法1:转字符串后截取

将time类型转换为字符串,再截取前8位:

SELECT SUBSTRING(CAST(Intime AS VARCHAR(20)), 1, 8) AS Intime
FROM stuattrecordAM

方法2:用时间格式化函数(更可靠)

如果是SQL Server环境,推荐用专门的时间格式化函数,避免字符串截取的潜在问题:

-- 返回字符串类型的hh:mm:ss格式
SELECT CONVERT(VARCHAR(8), Intime, 108) AS Intime
FROM stuattrecordAM

-- 返回无毫秒的time类型结果
SELECT CAST(Intime AS TIME(0)) AS Intime
FROM stuattrecordAM

CONVERT的108格式专门对应hh:mm:ss的时间输出,比字符串截取更适配不同的时间格式场景。

内容的提问来源于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:25:56