我有一张包含两个我关心的字符列的表,name
和value
。第二列只有两种类型的字符串,即'######'
形式的字符串和'##### / #####'
形式的字符串。显然,如果不是第二种数据类型,第二列应该是int。
根据评论,这是一个示例表。
[name] [value] ABC1 25 ABC2 13/45 ABC3 12/6 ABC4 15 ABC5 89 XYZ1 89 XYZ2 14 XYZ3 52 XYZ4 13 XYZ5 11
我需要从name
包含'XY'
value
小于50
的表格中删除所有行。要确定我需要删除哪些行,我可以运行
SELECT * FROM table WHERE name LIKE 'XY%' AND CONVERT(int,value)<50
返回
[name] [value] XYZ2 14 XYZ4 13 XYZ5 11
但是,我过于谨慎,并且首先要对表变量执行删除操作,以确保我没有忽略任何内容。如果我首先将表中的所有数据插入@TempTable
,并运行analagous select语句,则查询将在value = '13/45
的行上失败。 Conversion failed when converting the varchar value '13/45' to data type int.
表变量是否会导致SQL Server以不同于标准表的方式查询它?
答案 0 :(得分:1)
自2014年起,您可以使用TRY_PARSE。如果无法将值解析为指定的数据类型,则它将返回NULL。
select *
from YourTable
where Name like 'XY%'
and TRY_PARSE([value] as int) < 50