SQL将所有内容放在两个符号内
我遇到一个问题,我必须提取两个管道内的值,任何建议都将不胜感激 谷歌和功能 表达式charIndex'| |',@desc'将返回第一对管道的位置,so2+charIndex'| |',@desc'是您想要C的第一个字符的位置,然后为了获得长度,我们需要从结束位置减去开始位置。末端位置是第二对管道的charindex。要获得该结果,请使用charIndex函数的最后一个[optional]参数,该参数指定从何处开始查找。如果将其设置为第一对管道的位置,则charindex将找到下一对管道的位置:charindex'| |',@desc,charindex'| |',@desc。要提取的字符串长度是它们之间的差,调整一点SQL将所有内容放在两个符号内,sql,sql-server,Sql,Sql Server,我遇到一个问题,我必须提取两个管道内的值,任何建议都将不胜感激 谷歌和功能 表达式charIndex'| |',@desc'将返回第一对管道的位置,so2+charIndex'| |',@desc'是您想要C的第一个字符的位置,然后为了获得长度,我们需要从结束位置减去开始位置。末端位置是第二对管道的charindex。要获得该结果,请使用charIndex函数的最后一个[optional]参数,该参数指定从何处开始查找。如果将其设置为第一对管道的位置,则charindex将找到下一对管道的位置:
declare @desc varchar(max) = 'Purchased Order ||COFX123412||'
Select 2+charIndex('||', @desc), -- position of start of COFX123412
charIndex('||', @desc, charIndex('||', @desc)), -- pos of 2nd pair of pipes
2+charIndex('||', @desc))-2-charIndex('||', @desc), -- Length
substring(@desc, 2+charIndex('||', @desc),
charIndex('||', @desc, 2+charIndex('||', @desc))-
2-charIndex('||', @desc))
谷歌和功能
表达式charIndex'| |',@desc'将返回第一对管道的位置,so2+charIndex'| |',@desc'是您想要C的第一个字符的位置,然后为了获得长度,我们需要从结束位置减去开始位置。末端位置是第二对管道的charindex。要获得该结果,请使用charIndex函数的最后一个[optional]参数,该参数指定从何处开始查找。如果将其设置为第一对管道的位置,则charindex将找到下一对管道的位置:charindex'| |',@desc,charindex'| |',@desc。要提取的字符串长度是它们之间的差,调整一点
declare @desc varchar(max) = 'Purchased Order ||COFX123412||'
Select 2+charIndex('||', @desc), -- position of start of COFX123412
charIndex('||', @desc, charIndex('||', @desc)), -- pos of 2nd pair of pipes
2+charIndex('||', @desc))-2-charIndex('||', @desc), -- Length
substring(@desc, 2+charIndex('||', @desc),
charIndex('||', @desc, 2+charIndex('||', @desc))-
2-charIndex('||', @desc))
借助解析/拆分函数和交叉应用
Declare @YourTable table (ID int,[Desc] varchar(500))
Insert Into @YourTable values
(1,'Purched Order 12345 ||COXFF6||'),
(2,'Purched Order 12345 ||COXFF6||,||COX888|| haha ||COX777||')
Select ID
,[Desc] = '||'+B.RetVal+'||'
From @YourTable A
Cross Apply (Select *
From [dbo].[udf-Str-Parse](Replace('.'+A.[Desc],' ','.'),'||')
Where RetVal not like '[.,]%'
) B
返回
ID Desc
1 ||COXFF6||
2 ||COXFF6||
2 ||COX888||
2 ||COX777||
如果需要的话,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',' ')
借助解析/拆分函数和交叉应用
Declare @YourTable table (ID int,[Desc] varchar(500))
Insert Into @YourTable values
(1,'Purched Order 12345 ||COXFF6||'),
(2,'Purched Order 12345 ||COXFF6||,||COX888|| haha ||COX777||')
Select ID
,[Desc] = '||'+B.RetVal+'||'
From @YourTable A
Cross Apply (Select *
From [dbo].[udf-Str-Parse](Replace('.'+A.[Desc],' ','.'),'||')
Where RetVal not like '[.,]%'
) B
返回
ID Desc
1 ||COXFF6||
2 ||COXFF6||
2 ||COX888||
2 ||COX777||
如果需要的话,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',' ')
发布您的代码和问题描述。使用SQL以外的内容,因为每行的项目数似乎是动态的发布您的代码和问题描述。使用SQL以外的内容,因为每行的项目数似乎是动态的,请添加一些描述。请添加一些描述。