sql - 忽略 CAST 错误
问题描述
我有两个领域
CallLength(varchar(10)) and
CallLengthActual(varchar(10))
其中包含格式为 hh:mm:ss 的值。
我需要在几秒钟内找到两个字段之间的差异,当数据格式正确时,这可以正常工作。一些数据的格式不正确,当我尝试将其转换为整数时,我收到错误消息“将 varchar 值 'x' 转换为数据类型 int 时转换失败。”
有什么方法可以忽略格式不正确的数据?我正在使用 SQL Server 2012,文档说 TRY_CAST 受支持,但它似乎不适用于我的版本。
(CAST((SUBSTRING([CallLength],0,(CHARINDEX(':',[CallLength],0)))*3600)+(LEFT(RIGHT([CallLength],5),2)*60)+RIGHT([CallLength],2) AS int) -
CAST((SUBSTRING([CallLengthActual],0,(CHARINDEX(':',[CallLengthActual],0)))*3600)+(LEFT(RIGHT([CallLengthActual],5),2)*60)+RIGHT([CallLengthActual],2) AS Int)) AS Variance
解决方案
您没有提供示例数据和所需的结果,但您的代码看起来比需要的复杂得多。
如果我能在几秒钟内得到差异,我会简单地做:
datediff(second,
try_convert(time, CallLengthActual),
try_convert(time, CallLength)
) as diff_seconds
这可能是你想要的否定。我不确定你从什么中减去了什么。
如果try_convert()
不起作用,那么您的兼容性级别设置为旧版本。你可以非常接近isdate()
:
datediff(second,
(case when isdate(CallLengthActual) = 1 then convert(time, CallLengthActual end),
(case when isdate(CallLength) = 1 then convert(time, CallLength) end)
) as diff_seconds
推荐阅读
- c - 构建可执行文件时,使用 MinGW 的静态库无法正确更新
- sql-server - 替换 NCHAR(1600) 在 SQL Server 上不起作用
- mysql - TYPO3 10:从外部数据库源获取数据
- php - 用 php 调用 web 服务方法,返回无法识别的字符
- laravel - Laravel 尝试提供唯一字段验证时出现 sql 错误
- mysql - 社交登录的数据库用户模型
- haskell - 函数中缀时的运算符优先级(Haskell)
- reactjs - 通过 React Navigation setOptions 使用功能组件的方法和状态
- tsql - Sql Server 2019 中的 TSQL ENCRYPTBYPASSPHRASE 函数
- unit-testing - 验证失败 - 未调用函数