在某些情况下使用相同数据转换varchar值时转换失败

时间:2016-04-13 19:42:48

标签: sql sql-server

我有两个数据库,我正在查看,当我在两者上运行此查询时,一个返回一个值,一个抛出转换错误

  

code_desc是varchar列,其中包含一些varchars

SELECT *
FROM t_ccs_admin_code
WHERE code_grp = '50042' AND code_desc = 015105

我在表t_ccs_admin_code上进行了比较,所有数据似乎都在数据库中匹配。我知道我可以解决这个问题,但此时我真的只想弄清楚为什么我会在一个环境中而不是另一个环境中得到它。

2 个答案:

答案 0 :(得分:0)

将字符串列与数字进行比较时,SQL Server(无论好坏)会尝试将字符串转换为数字。如果出现任何问题,这就是转换错误的原因。

你应该做的事情如下:

code_desc = '015105'

或者也许:

code_desc like '%015105%'

当所有字符都是数字时 - 或者即使在开头或结尾有空格,从字符串到int的转换也适用。但是,很容易失败。因此,如果任何行包含1.23a1 1或其他可能的值,您将获得转换错误。

答案 1 :(得分:0)

您应该改为运行此查询

SELECT *
FROM t_ccs_admin_code
WHERE code_grp = '50042' AND cast(code_desc as varchar)='015105'

似乎一个DB的列code_desc为int / numeric / bigint,而其他列的列与varchar类型相同。

以上查询将同时在

上运行