将几个字符从nvarchar转换为int

时间:2016-07-21 08:38:09

标签: sql-server sql-server-2008 sql-server-2005

declare @var1 nvarchar(100)
set @var1='C85,c84,c88'
set @var1=REPLACE(@var1,'C','')
select column24 from someTable where column23 in (@var1)

大家好,我是新来的,我需要帮助。这个查询给了我什么,我知道它的beacouse var1是nvarchar,但我不知道如何让它工作。不要问我为什么使用REPLACE,我正在测试一些东西,在这个特定的查询中它看起来很愚蠢。所以密切关注那一个:) 是的,第23栏的someTable中有84,85,88行。我只通过mssql管理工作室这样做。

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

DECLARE @var1 NVARCHAR(100);
SET @var1 = N'C85,c84,c88';
SET @var1 = REPLACE(@var1,'C','');

--select @var1;
DECLARE @sql NVARCHAR(4000);
SET @SQL = N'select column24 from someTable where column23 in (' + @var1 + ')' ;
--SELECT @SQL; 
EXEC sp_executesql @SQL;

答案 1 :(得分:0)

试试这个,

DECLARE @var1 NVARCHAR(100)

SET @var1 = 'C85,c84,c88'
SET @var1 = REPLACE(@var1, 'C', '')

SELECT column24
FROM someTable s
WHERE EXISTS (
        SELECT 1
        FROM (
            SELECT CAST('<XMLRoot><RowData>' + REPLACE(@var1, ',', '</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
            ) t
        CROSS APPLY x.nodes('/XMLRoot/RowData') m(n)
        WHERE s.column23 = LTRIM(RTRIM(m.n.value('.[1]', 'int')))
        )