Sql server 从Hhh:mm:ss中删除总天数

Sql server 从Hhh:mm:ss中删除总天数,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我有一个varchar字段,用于存储连接的持续时间,这些连接偶尔会持续几天。我试图将总天数与此字段中的hh:mm:ss分开,以便可以单独存储,但每当我尝试将此数据转换为任何类型的datetime变量,以便将天数与值分开,然后扣除时,就会出现超出范围的错误。他们有没有办法做到这一点,或者我需要使用一个粗糙的charindex(“:”只是为了消除这些天?因为它不是有效的日期或时间格式,所以你必须将它切碎: DECLARE @timeString VARCHAR(50) = '114:48:50' S

我有一个varchar字段,用于存储连接的持续时间,这些连接偶尔会持续几天。我试图将总天数与此字段中的hh:mm:ss分开,以便可以单独存储,但每当我尝试将此数据转换为任何类型的datetime变量,以便将天数与值分开,然后扣除时,就会出现超出范围的错误。他们有没有办法做到这一点,或者我需要使用一个粗糙的charindex(“:”只是为了消除这些天?

因为它不是有效的日期或时间格式,所以你必须将它切碎:

DECLARE @timeString VARCHAR(50) = '114:48:50'
SELECT   Day_CT = LEFT(@timeString ,CHARINDEX(':',@timeString )-1)/24
        ,Tm = CAST(CAST(LEFT(@timeString ,CHARINDEX(':',@timeString )-1)%24 AS VARCHAR(12))+STUFF(@timeString ,1,CHARINDEX(':',@timeString )-1,'') AS TIME)

这是日期和时间不应存储在字符串数据类型中的众多原因之一,这会使使用它们变得丑陋。

varchar的格式到底是什么?305:19:43,即hhh:mm:ss。它位于varchar(1024)中字段,但我通过将每个单独的time/int/bigint设置为第四个来减少字段。hhh:mm:ss是我称之为“Duration1”的特定持续时间这就是我从文本字段中解析出来的内容。从技术上讲,这些是包含更多内容的ASA SNMP消息,但这是我遇到问题的解析数据,其他一切都很好。这是我担心的,但感谢您为此添加了选择。非常感谢。STUFF函数对我来说是新的,所以我不得不加入调查该功能的一些其他最佳实践。