sql - 派生表 SQL Server 2008 中的强制转换函数失败

标签 sql sql-server casting

我有一张带有字母数字代码的表格。在这个特定的例子中,我不关心本质上是字母数字的代码,只关心那些包含整数的代码。我写了一个小查询来查找我需要的代码子集:

 select CAST(icd as float) as icd

from
(
select i.icd
    from icd as i
    where icd like '952%' or icd like '806%' or icd like '3440%' or icd like '3441'
)t

这会返回我需要的代码列表。但是,当我尝试使用 where 子句时,例如:
where icd between 80600 and 80610查询失败,告诉我它无法将 varchar 数据类型转换为 int。但是,如果我做类似的事情
select CAST(icd as float) as icd,icd+10

from
(
select i.icd
    from icd as i
    where icd like '952%' or icd like '806%' or icd like '3440%' or icd like '3441'
)t

我可以为每个代码添加十个并运行,这意味着它们实际上是整数。我想用where像这样的子句,因为代码 80600-80610 应该标记为 X,而 80611-80620 应该标记为 Y。我可以为每个代码手动执行此操作,但我希望比这更具可扩展性。

如何确保 SQL Server 在使用此 where 子句时只查看派生表,而不是失败?

最佳答案

您的内部查询可能正在返回 varchar 字段。你能跑吗

select i.icd
from icd as i
where icd like '952%' or icd like '806%' or icd like '3440%' or icd like '3441'

并确保没有返回字符串数据?

仅供引用,由于您使用的是内部查询,因此可以添加
WHERE IsNumeric(t.icd ) = 1 

确保只返回整数

关于sql - 派生表 SQL Server 2008 中的强制转换函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031980/

相关文章:

mysql - Case 语句总是给出 1. MySQL

sql - 使用 PostgreSQL 的透视 View

mysql - 删除约束时,会自动创建索引

python - 通过符号将实值 numpy 数组转换为二进制数组

java - 子类中参数化父类(super class)方法和非参数化(具体类型)方法

php - 选择并插入

sql - sql中十进制值的自定义转换

sql-server - 临时存储上的 Azure VM SQL Server Tempdb

不同类型的 C++ 模板错误

java - 父子关系表