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

如何在SQL Server中从指定格式字符串提取日、时、分字段

提取Duration列中的日、时、分字段

你的原始语句问题在于,LEFT(StageDuration, CHARINDEX('day', Duration) - 1)会取出day前面的所有内容(比如minute45hour1),而不是我们需要的数字部分。下面是针对SQL Server的正确写法,可以分别提取出day、hour、minutes字段:

完整SQL语句

SELECT
    -- 提取day字段:取'day'之后的所有数字
    CAST(SUBSTRING(Duration, CHARINDEX('day', Duration) + 3, LEN(Duration)) AS INT) AS day,
    -- 提取hour字段:取'hour'之后到'day'之前的数字
    CAST(SUBSTRING(Duration, CHARINDEX('hour', Duration) + 4, CHARINDEX('day', Duration) - CHARINDEX('hour', Duration) - 4) AS INT) AS hour,
    -- 提取minutes字段:取'minute'之后到'hour'之前的数字
    CAST(SUBSTRING(Duration, CHARINDEX('minute', Duration) + 6, CHARINDEX('hour', Duration) - CHARINDEX('minute', Duration) - 6) AS INT) AS minutes
FROM
    你的表名;

语句说明

  • minutes提取:先定位minute的位置,加上6(minute的字符长度)就是数字起始位,结束位是hour的位置减去起始位的长度,最后转成整数类型。
  • hour提取:同理,定位hour的位置加4(hour的字符长度)作为起始位,结束位是day的位置减去起始位的长度。
  • day提取:定位day的位置加3(day的字符长度),从这里开始到字符串末尾的内容就是day的数字,转成整数即可。

测试你的示例数据,这个语句会输出你预期的结果:

dayhourminutes
0145
2108
11215

内容的提问来源于stack exchange,提问作者Guissous Allaeddine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:45:31