2016-05-10 12 views
1

をINTに変換私はのSQL Server 2014 - スプリット文字列&

1,2,35

を持って|で文字列を分割した後

1,2,3|5

を持っている今、私は1,2,3を変換したいですINT。どうすればこれを達成できますか?

は、上記のクエリはエラーをスロー

私は

SELECT name 
FROM tmptable 
WHERE id in(SELECT items FROM splitbystring(@tmpReferContentRule,'|')) 

idでそれを使用したい整数の種類私のクエリ

Declare @tmpReferContentRule = "1,2,3|5" 
SELECT items 
FROM splitbystring(@tmpReferContentRule,'|') 
WHERE id = 1 

されている

1,2,3をintに変換できませんでした。

解決策をご提案ください。

+0

ないMySQLのスクリプトで二回、次のように私はそれを使用するので、私はそのタグを削除しました。 – jarlh

+0

'1,2,3'は' int'に収まらないので、何とか解析する必要があります。期待している結果は何ですか? – HoneyBadger

+0

私はtmptableから選択名でそれを使用したいと思います(idt = 1のsplitbystring(@tmpReferContentRule、 '|')の項目を選択してください)idはintです –

答えて

0

あなたはこれを試すことができ

select name from tmptable as t1 inner join (@tmpReferContentRule,'|') as t2 on 
','+t2.items+',' like '%,'+cast(t1.id as varchar(10)+',%' 
where t2.id=1 
1

この方法試してみてください -

Declare @tmpReferContentRule varchar(20) = '1,2,3|5' 

;with cte 
AS 
(
    SELECT items as subitem from dbo.splitbystring(@tmpReferContentRule,'|') 
) 
SELECT name FROM tmptable WHERE id IN 
(
    SELECT t.items FROM cte 
    CROSS APPLY (SELECT * from dbo.splitbystring (subitem,',')) t 
) 
+0

ありがとう@Krishnraj、私は解決策を得た。 –

0

は、XMLの助けを借りて、テーブルにその文字列を変換することができます

DECLARE @string nvarchar(10) = '1,2,3|5', 
     @xml xml 

SELECT @xml = CAST('<r><a>' + REPLACE(REPLACE(@string,',','</a><a>'),'|','</a><b>') +'</b></r>' as xml) 

SELECT t.v.value('.','int') as id 
FROM @xml.nodes('/r/a') as t(v) 

出力:

id 
1 
2 
3 
0

私はすでに私は似たsplit string sql functionを持つスプリット文字列関数 を使用している参照して、明らかに

Declare @tmpReferContentRule varchar(max) = '1,2,3|5' 

SELECT * 
FROM Table1 t 
inner join (
    select 
     s2.val 
    from dbo.Split(@tmpReferContentRule,'|') s1 
    cross apply dbo.Split(s1.val,',') s2 
    WHERE 
     s1.id = 1 
) s on t.id = s.val