将值从VARCHAR转换为INT

时间:2013-07-29 15:04:13

标签: sql sql-server tsql

我在查询中遇到以下问题

  

将nvarchar值'190,191,192'转换为数据类型int。

时转换失败

查询

SELECT * 
FROM SGI_User
JOIN SGI_Agency_User
ON SGI_User.User_Id = SGI_Agency_User.User_Id
WHERE SGI_Agency_User.Agency_Id IN
(select STUFF(
                (select CAST(',' as varchar(max)), cast(agency_id as int)
                from sgi_agency
                where filial_de_int_matriz = 192 or 
                (Agency_Id = 192 and Filial_De_int_matriz = 0)
                for xml path('')), 1, 1, ''))
and SGI_User.Deleted = 0

这3个值190,191,192来自此查询

select STUFF(
        (select CAST(',' as varchar(max)), cast(agency_id as int)
        from sgi_agency
        where filial_de_int_matriz = 192 or 
        (Agency_Id = 192 and Filial_De_int_matriz = 0)
        for xml path('')), 1, 1, '')

返回varchar但我的SGI_Agency_User.Agency_Id字段为INT我尝试了一些CAST,但没有成功。我该怎么做这个查询?

1 个答案:

答案 0 :(得分:3)

我不明白为什么你认为你需要首先将这些INT值转换为字符串...

你不能只使用:

WHERE SGI_Agency_User.Agency_Id IN
                (SELECT agency_id
                 FROM sgi_agency
                 WHERE filial_de_int_matriz = 192 
                    OR (Agency_Id = 192 AND Filial_De_int_matriz = 0)
                )

并完全跳过所有转换?这个子查询将返回一个整数值列表,可以由IN操作使用 - 没问题,不需要任何转换......