如何在字符串后面找到接下来的10个字符

时间:2014-04-22 04:16:24

标签: sql-server sql-server-2008

我有一个字符串"创建程序测试" 。请在下面找到我的要求:

1-我必须找到字符串" Procedure"

2-在此之后,我想搜索特定字符串是否在字符串过程之后的后5个字符中显示&#34; dbo&#34; 。< / p>

3-如果 dbo 不存在,我想在字符串测试之前连接一个字符串 MySchema

任何建议

2 个答案:

答案 0 :(得分:1)

通过一些简单计算的常规IF可以满足您的需求;

DECLARE @input   NVARCHAR(MAX) = 'Create Procedure Test'
DECLARE @keyword NVARCHAR(MAX) = 'Procedure'
DECLARE @inject  NVARCHAR(MAX) = 'MySchema.'

DECLARE @index    BIGINT = CHARINDEX(@keyword, @input)
DECLARE @dboindex BIGINT = CHARINDEX('dbo', @input, @index)

IF @dboindex < 1 OR @dboindex - @index - LEN(@keyword) > 5
BEGIN
  SET @input = STUFF(@input, @index + LEN(@keyword) + 1, 0, @inject)
END

SELECT @input

An SQLfiddle to test with

CHARINDEX会找到您要查找的字符串在原始字符串中的位置,如果位置相差5或更少(或dbo根本不存在),它会使用STUFF在&#34;过程&#34;。

之后将新字符串注入固定位置

您可能希望在进行时添加一些额外的容差,例如,它目前仅在&#34; procedure&#34;之后处理单个空格。

答案 1 :(得分:0)

Declare @Expression varchar = 'Create Procedure Test'

If CharIndex('Procedure', @Expression) > 0
Begin
    Declare @Index Int = CharIndex('Procedure', @Expression)

    If CharIndex('dbo', SubString(@Expression, @Index, 5)) = 0
    Begin
        Print Stuff(@Expression, @Index + 10, 0, 'MySchema.')
    End
End