将具有时间长度的字符串转换为不同的数据类型

时间:2019-05-08 14:55:15

标签: sql sql-server types sqldatatypes string-conversion

我正在sql server中工作,并且提供了一个文件,该文件的“ Duration”列包含格式为HH:MM:SS的时间长度的字符串类型值。

示例:

Duration:
00:01:34, 
00:25:20, 
01:01:53

我试图弄清楚如何将那些字符串转换为可用于计算诸如“平均持续时间”和“总持续时间”之类的数据类型的数据,这些数据显然不能在字符串上运行。

我已经用相同的方式格式化所有值,并试图使用CAST和CONVERT将数据类型更改为时间。

我的查询将开始运行并转换几千行,但随后出现错误并显示以下错误消息:

从字符串转换日期和/或时间时转换失败。

尝试投射:

SELECT CAST(Duration as time)
FROM TABLE

尝试转换:

SELECT CONVERT(time, Duration)
FROM TABLE

转换开始于我的文件,当我查看结果选项卡时,结果看起来像预期的那样,采用HH:MM:SS.nnnnnnn格式,但随后几千行后查询错误出来。

我是用完全错误的方式来做这件事吗?我唯一想到的另一件事可能是分解字符串,计算时间长度并以秒为单位存储它,然后在运行任何聚合计算后重新计算持续时间。我希望有一种更直接的方法到达那里。

1 个答案:

答案 0 :(得分:2)

您的数据不匹配。如果您不关心不匹配项(即,将看起来不像时间值的值转换为TRY_CAST()),则可以只使用TRY_CONVERT()NULL

如果要查找有问题的值:

SELECT Duration
FROM TABLE
WHERE TRY_CAST(Duration as time) IS NULL AND Duration IS NOT NULL