我建议首先在变量中选择冒号的索引,然后基于它运行你的字符串解析。这是我在 SSMS 中使用的原始代码:
declare @fecha varchar(30)
set @fecha='9:4:2'
select
cast(substring(@fecha, 1, HourLimiter - 1) as INT)
, cast(substring(@fecha, HourLimiter + 1, MinuteLimiter - HourLimiter - 1) as INT)
, cast(substring(@fecha, MinuteLimiter + 1, len(@fecha) - MinuteLimiter) as INT)
from (
select
charindex(':', @fecha) AS HourLimiter
, charindex(':', @fecha, charindex(':', @fecha)+1) AS MinuteLimiter
) t
set @fecha='29:59:59'
select
cast(substring(@fecha, 1, HourLimiter - 1) as INT)
, cast(substring(@fecha, HourLimiter + 1, MinuteLimiter - HourLimiter - 1) as INT)
, cast(substring(@fecha, MinuteLimiter + 1, len(@fecha) - MinuteLimiter) as INT)
from (
select
charindex(':', @fecha) AS HourLimiter
, charindex(':', @fecha, charindex(':', @fecha)+1) AS MinuteLimiter
) t
我在SQLFiddle上也有一个基于表的解决方案。