Tsql PATINDEX、通配符和变量
如何让Tsql PATINDEX、通配符和变量,tsql,sql-server-2012,wildcard,patindex,Tsql,Sql Server 2012,Wildcard,Patindex,如何让PATINDEX对包含%字符的变量进行通配符卡匹配 在下面的示例中,我希望PATINDEX返回“%3d”的起始位置: DECLARE @inputText as VARCHAR(100) DECLARE @s as Int DECLARE @cIn as CHAR(3) SET @inputText = 'OEi49j3DNxE%3d' SET @cIn = '%3d' SET @s = PATINDEX('%' + @cIn +'%', @InputText) 从@InputT
PATINDEX
对包含%
字符的变量进行通配符卡匹配
在下面的示例中,我希望PATINDEX
返回“%3d”的起始位置:
DECLARE @inputText as VARCHAR(100)
DECLARE @s as Int
DECLARE @cIn as CHAR(3)
SET @inputText = 'OEi49j3DNxE%3d'
SET @cIn = '%3d'
SET @s = PATINDEX('%' + @cIn +'%', @InputText)
从@InputText
中可以看到,这从位置12开始
OEi49j3DNxE%3d
但是PATINDEX
似乎返回7的开始位置,因为它似乎从CIn
中删除了%
:
OEi49j3DNxE%3D
如何按指定查找
%3d
,而不是3d
?您可以使用方括号:
SET @cIn = '[%]3d'
rextester演示: 返回:
+------------------+---------------+
| without_brackets | with_brackets |
+------------------+---------------+
| 7 | 12 |
+------------------+---------------+
可以使用方括号:
SET @cIn = '[%]3d'
rextester演示: 返回:
+------------------+---------------+
| without_brackets | with_brackets |
+------------------+---------------+
| 7 | 12 |
+------------------+---------------+
您必须用[]换行以避开%符号。为了做到这一点,您必须将变量@cIn变大以容纳额外的2个字符,并且只需在执行patindex之前进行替换,或者您可以在不更改变量大小的情况下进行内联操作
DECLARE @inputText as VARCHAR(100)
DECLARE @s as Int
DECLARE @cIn as CHAR(5)
SET @inputText = 'OEi49j3DNxE%3d'
SET @cIn = '%3d'
SET @cIn = REPLACE(@cIn, '%', '[%]')
SET @s = PATINDEX('%' + @cIn +'%', @InputText)
或
您可以在此处阅读更多信息:您必须用[]换行%符号。为了做到这一点,您必须将变量@cIn变大以容纳额外的2个字符,并且只需在执行patindex之前进行替换,或者您可以在不更改变量大小的情况下进行内联操作
DECLARE @inputText as VARCHAR(100)
DECLARE @s as Int
DECLARE @cIn as CHAR(5)
SET @inputText = 'OEi49j3DNxE%3d'
SET @cIn = '%3d'
SET @cIn = REPLACE(@cIn, '%', '[%]')
SET @s = PATINDEX('%' + @cIn +'%', @InputText)
或
您可以在此处阅读更多信息:
产出:12
输出:12被选为答案,因为提供的备选方案对我有效(
cIn
正在其他地方使用,并且将其存储为[%]3d
会导致其他问题)。谢谢:)投票作为答案,因为提供的备选选项对我有效(cIn
正在其他地方使用,将其存储为[%]3d
会导致其他问题)。谢谢:)完全正确-只使用@Avitus,因为提供的替代方案在我的完整代码中工作得更好。谢谢。完全正确-只使用@Avitus,因为提供的替代方案在我的完整代码中工作得更好。谢谢。正确,非常感谢-只使用了@Avitus,因为在我的完整代码中提供的替代方案工作得更好。谢谢。正确,非常感谢-只使用了@Avitus,因为在我的完整代码中提供的替代方案工作得更好。谢谢