Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
子字符串-T-SQL_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

子字符串-T-SQL

子字符串-T-SQL,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个字符串,它被插入到一个表中。字符串的大小和内容各不相同 我基本上需要两个已知单词之间的所有字符(\upart1id=和\upart2id=) 我想从整根弦中得到这两根弦之间的所有东西 我已经试过了,但是在\upart2id=之前就已经得到了一切 有人知道如何在特定条件下工作吗 谢谢试试: declare @someString nvarchar(200) = 'lkasjdlkasjdl_Part1ID=hereIsTheBitYouWant_Part2IDlksajdlaksdj'

我有一个字符串,它被插入到一个表中。字符串的大小和内容各不相同

我基本上需要两个已知单词之间的所有字符(
\upart1id=
\upart2id=

我想从整根弦中得到这两根弦之间的所有东西

我已经试过了,但是在
\upart2id=
之前就已经得到了一切

有人知道如何在特定条件下工作吗

谢谢

试试:

declare @someString nvarchar(200) = 'lkasjdlkasjdl_Part1ID=hereIsTheBitYouWant_Part2IDlksajdlaksdj'

select  substring(@someString, patindex('%_Part1ID%', @someString) + 9, patindex('%_Part2ID%', @someString) - (patindex('%_Part1ID%', @someString) + 9))
尝试:


使用关键字和字段名修改此模板

declare @mystring nvarchar(max) = 'some irrelevant text STARTPOINTI Should Return this text to youENDPOINT other irrelevant text';
declare @bookend1 nvarchar(max) = 'STARTPOINT';
declare @bookend2 nvarchar(max) = 'ENDPOINT';
select
  substring
   (
    @mystring
   ,CHARINDEX(@bookend1,@mystring) + len(@bookend1)
   ,charindex(@bookend2,@mystring) - charindex(@bookend1,@mystring) - len(@bookend1)
   )

使用关键字和字段名修改此模板

declare @mystring nvarchar(max) = 'some irrelevant text STARTPOINTI Should Return this text to youENDPOINT other irrelevant text';
declare @bookend1 nvarchar(max) = 'STARTPOINT';
declare @bookend2 nvarchar(max) = 'ENDPOINT';
select
  substring
   (
    @mystring
   ,CHARINDEX(@bookend1,@mystring) + len(@bookend1)
   ,charindex(@bookend2,@mystring) - charindex(@bookend1,@mystring) - len(@bookend1)
   )
假设字符串(或字符串列)命名为
s
,请尝试:

substring(s, nullif(charindex('_ Part1ID = ', s),0) + 12   -- skip tag (length = 12)
           , nullif(charindex('_ Part2ID = ', s),0)
             - (nullif(charindex('_ Part1ID = ', s),0) + 12) )
这假设Part2ID标记永远不会出现在Part1ID之前。我们使用
nullif(charindex(…),0)
,这样,如果找不到标记,结果将正确地为null

如果要创建一个内联函数,您可以更优雅一些:

CREATE FUNCTION dbo.fnGetPart ( 
    @s varchar(8000), @tag1 varchar(20), @tag2 varchar(20)
) returns varchar(100) AS
BEGIN
    return (    select substring(@s, i1, i2 - i1)
        from (  select i1, i2 = nullif(charindex(@tag2, @s, i1),0)    -- ', i1' ensures we look after @tag1
            from (select i1 = nullif(charindex(@tag1, @s),0) + len(@tag1)) t ) t )
END
假设字符串(或字符串列)命名为
s
,请尝试:

substring(s, nullif(charindex('_ Part1ID = ', s),0) + 12   -- skip tag (length = 12)
           , nullif(charindex('_ Part2ID = ', s),0)
             - (nullif(charindex('_ Part1ID = ', s),0) + 12) )
这假设Part2ID标记永远不会出现在Part1ID之前。我们使用
nullif(charindex(…),0)
,这样,如果找不到标记,结果将正确地为null

如果要创建一个内联函数,您可以更优雅一些:

CREATE FUNCTION dbo.fnGetPart ( 
    @s varchar(8000), @tag1 varchar(20), @tag2 varchar(20)
) returns varchar(100) AS
BEGIN
    return (    select substring(@s, i1, i2 - i1)
        from (  select i1, i2 = nullif(charindex(@tag2, @s, i1),0)    -- ', i1' ensures we look after @tag1
            from (select i1 = nullif(charindex(@tag1, @s),0) + len(@tag1)) t ) t )
END

不清楚你想要什么。您能提供一些示例吗?当您添加示例时,第1部分和/或第2部分可能会在输入中多次出现?如果是这样的话,应该如何处理呢?谢谢你们的回复。马克的回答似乎适合我的情况。我将很快发布一个示例,看看是否有更好的技术可以做到这一点。谢谢。:)不清楚你想要什么。您能提供一些示例吗?当您添加示例时,第1部分和/或第2部分可能会在输入中多次出现?如果是这样的话,应该如何处理呢?谢谢你们的回复。马克的回答似乎适合我的情况。我将很快发布一个示例,看看是否有更好的技术可以做到这一点。谢谢。:)包含一些解释有助于OP理解您发布的代码的实质内容。包含一些解释有助于OP理解您发布的代码的实质内容。