将具有不同数据类型的表中的数据类型varchar转换为数值时出错

时间:2019-07-14 13:26:25

标签: sql sql-server

我想使用between运算符从列中选择数据 看起来像这样:

select count(distinct value) 
  from dbo.OrganizationSupplementalData
 where value between 5 and 30;

但是得到

Error converting data type varchar to numeric

我也尝试过使用CAST,但是它不起作用:

select count(distinct value) 
  from dbo.OrganizationSupplementalData
 where cast(value as decimal(22, 8)) between 0.1 and 30.00;

value列中包含以下类型的数据:

2017
2017
2017
2017
8:55:00 AM
11:00:00 AM
8:00:00 AM
8:45:00 AM
3.66
2.35

我最终如何提取所需的数据? 谢谢!

1 个答案:

答案 0 :(得分:2)

使用TRY_CAST()

where TRY_CAST(value AS DECIMAL(22, 8)) between 0.1 and 30.00

很明显,当您尝试将非数字值转换为数字时,它们会引起问题。在这种情况下,TRY_CAST()将返回NULL

在不受支持的旧版SQL Server中,可以使用case表达式:

where (case when value not like '%[0-9.]%' and
                 value not like '%.%.%'
            then CAST(value AS DECIMAL(22, 8))
       end)