基于代码模式操作字符串的SQL算法
我的Sql代码如下:基于代码模式操作字符串的SQL算法,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的Sql代码如下: Declare @text nvarchar(max) = 'America,Japan,Indonesia,London' Declare @Pattern nvarchar(20) = '1001' 因此,对于这种模式,sql函数应该返回字符串“America,London” 应根据模式操作字符串,如果模式字符为0,则应删除相应的逗号分隔文本 预期样本输出: @Pattern @Text 1100 'America,Ja
Declare @text nvarchar(max) = 'America,Japan,Indonesia,London'
Declare @Pattern nvarchar(20) = '1001'
因此,对于这种模式,sql函数应该返回字符串“America,London”
应根据模式操作字符串,如果模式字符为0,则应删除相应的逗号分隔文本
预期样本输出:
@Pattern @Text
1100 'America,Japan'
1000 'America'
0100 'Japan'
1111 'America,Japan,Indonesia,London'
在SQL Server 2008中,借助解析/拆分函数实现此结果的有效方法是什么
Declare @text nvarchar(max) = 'America,Japan,Indonesia,London'
Declare @Pattern nvarchar(20) = '1001'
Select NewString = Stuff((Select ',' +RetVal
From (Select A.RetSeq,A.RetVal
From (Select * from [dbo].[udf-Str-Parse](@Text,',')) A
Join (Select * from [dbo].[udf-Str-Parse](Stuff(Replace(Replace(@Pattern,'0',',0'),'1',',1'),1,1,''),',')) B
on (A.RetSeq=B.RetSeq and B.RetVal=1)
) A
For XML Path ('')),1,1,'')
返回
NewString
America,London
如果需要的话,UDF
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table
As
Return (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>'+ Replace(@String,@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
);
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
源文本是否总是恰好由四列分隔的四个名称?是否总是有四个城市?或者它可以更多?将字符串转换为xml列表,然后对其使用xml查询。或者更好的是,让前端发送xml。无需RBarry。城市可以更多。它没有固定的四个城市