我有一个字符串"创建程序测试" 。请在下面找到我的要求:
1-我必须找到字符串" Procedure" 。
2-在此之后,我想搜索特定字符串是否在字符串过程之后的后5个字符中显示&#34; dbo&#34; 。< / p>
3-如果 dbo 不存在,我想在字符串测试之前连接一个字符串 MySchema 。
任何建议
答案 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
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