子字符串-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理解您发布的代码的实质内容。