SQL SERVER 2014 - Split String&转换为INT

时间:2016-05-10 09:19:59

标签: sql sql-server

我有一个字符串

1,2,3|5

与[{1}}分割后我有

|1,2,3

现在我想将5转换为1,2,3。我怎样才能做到这一点?

以下是我的查询

INT

我想在

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

SELECT name FROM tmptable WHERE id in(SELECT items FROM splitbystring(@tmpReferContentRule,'|')) 是整数类型

以上查询引发错误

  

1,2,3无法转换为int。

请提出解决方案。

4 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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

答案 2 :(得分: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

答案 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