Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将所有内容放在两个符号内_Sql_Sql Server - Fatal编程技术网

SQL将所有内容放在两个符号内

SQL将所有内容放在两个符号内,sql,sql-server,Sql,Sql Server,我遇到一个问题,我必须提取两个管道内的值,任何建议都将不胜感激 谷歌和功能 表达式charIndex'| |',@desc'将返回第一对管道的位置,so2+charIndex'| |',@desc'是您想要C的第一个字符的位置,然后为了获得长度,我们需要从结束位置减去开始位置。末端位置是第二对管道的charindex。要获得该结果,请使用charIndex函数的最后一个[optional]参数,该参数指定从何处开始查找。如果将其设置为第一对管道的位置,则charindex将找到下一对管道的位置:

我遇到一个问题,我必须提取两个管道内的值,任何建议都将不胜感激

谷歌和功能

表达式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))
谷歌和功能

表达式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以外的内容,因为每行的项目数似乎是动态的,请添加一些描述。请添加一些描述。