2016-05-10 16 views
1
INT

Ich habe eine ZeichenfolgeSQL SERVER 2014 - Split String & Convert

1,2,3|5

Nach Split mit | Ich habe

1,2,3, 5

Jetzt möchte ich 1,2,3 konvertieren INT. Wie kann ich das erreichen?

Folgende ist meine Abfrage

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

ich es in

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

id ist Typ integer

Die obige Abfrage wirft einen Fehler

verwenden möchten

1,2,3 konnte nicht in int konvertiert werden.

Bitte schlagen Sie eine Lösung vor.

+0

Offensichtlich nicht MySQL, so entfernte ich dieses Tag. – jarlh

+0

'1,2,3' passt nicht in ein' int', also musst du es irgendwie parsen. Was erwartet Sie? – HoneyBadger

+0

Ich möchte es in ausgewählten Namen von Tmptable verwenden, wo ID in (SELECT-Elemente von splitbstring (@ tmpReferContentRule, '|') mit ID = 1) hier ID ist int –

Antwort

0

Versuchen Sie, diese Methoden

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

du versuchen können -

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

Danke @Krishnraj, ich habe eine Lösung. –

0

Sie diese Zeichenfolge in die Tabelle mit Hilfe von XML konvertieren:

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) 

Ausgang:

id 
1 
2 
3 
0

Ich sehe, Sie wurden bereits eine Split String Funktion mit Ich habe ein ähnliches split string sql function, habe ich es als zweimal in Ihrem Skript folgt

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 
Verwandte Themen