2013-07-29 113 views
-1

我在查詢轉換爲nvarchar值「190191192」 int數據類型時從VARCHAR轉換值爲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但沒有成功。我該如何做這個查詢?

+0

您是否正在尋找一種方式來分割字符串成單獨的值,以便他們被轉換成整數? – Gidil

+0

這是一個問題,我可以在查詢中放入一個'IN'語句來搜索INT值,但是如何將我的子查詢轉換爲一組'INT'數字? –

回答

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操作中使用的列表 - 沒問題,不需要任何任何轉換...

相關問題