我有一个字符串
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。
请提出解决方案。
答案 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