2个字符串之间的字符串

String between 2 Strings

我目前正在使用下面列出的函数来查找 2 个字符串之间的文本,我的问题是什么都找不到,只是 return 是一个错误,我不会 return space 或 Null,请问有人可以就如何更改它提供任何建议吗?

CREATE FUNCTION [dbo].[udf_GetStringBetween2Strings] 
(
    @String varchar(max), 
    @FirstString varchar(256), 
    @SecondString varchar(256)
)
RETURNS VARCHAR(max) 
AS
BEGIN

    DECLARE @FirstPosition int,  @SecondPosition int
    SET @FirstPosition = CHARINDEX(@FirstString,@String) + LEN(@FirstString)
    SET @SecondPosition = CHARINDEX(@SecondString,@String) 
    RETURN (SELECT SUBSTRING(@String, @FirstPosition, @SecondPosition - @FirstPosition))

END

试试这个

    CREATE FUNCTION [dbo].[udf_GetStringBetween2Strings] 
(
    @String varchar(max), 
    @FirstString varchar(256), 
    @SecondString varchar(256)
)
RETURNS VARCHAR(max) 
AS
BEGIN

    DECLARE @FirstSplit VARCHAR(100),@SecondSplit VARCHAR(100),@ReturnStr VARCHAR(100)
    SET @FirstSplit = SUBSTRING(@String,0,CHARINDEX(' ',@String))
    SET @String = SUBSTRING(@String,CHARINDEX(' ',@String)+1,LEN(@String))
    SET @SecondSplit = @String

    IF @FirstSplit = @FirstString
       SET @ReturnStr =  @FirstSplit
    ELSE IF @SecondSplit = REPLACE(@SecondString,'?','')
      SET @ReturnStr =  @SecondSplit
    ELSE 
      SET @ReturnStr = 'Not Found'    RETURN @ReturnStr END

最直接的方法是检查 charindex 的结果(returns 没有找到匹配项时为 0)。例如

DECLARE @FirstPosition int,  @SecondPosition int
SET @FirstPosition = CHARINDEX(@FirstString,@String) 
if @FirstPosition = 0 return 'Not found'
set @FirstPosition += LEN(@FirstString)
SET @SecondPosition = CHARINDEX(@SecondString,@String, @FirstPosition) 
if @SecondPosition = 0 return 'Not found'   
return SUBSTRING(@String, @FirstPosition, @SecondPosition - @FirstPosition)