如何在PATINDEX模式参数中转义下划线字符?

pod*_*sta 67 regex t-sql sql-server escaping sql-like

我找到了一个用PATINDEX找到下划线位置的解决方案:

DECLARE @a VARCHAR(10)  
SET     @a = '37_21'

PRINT PATINDEX('%_%', @a)                    -- return 1 (false)
PRINT PATINDEX('%!%', REPLACE(@a, '_', '!')) -- return 3 (correct)
Run Code Online (Sandbox Code Playgroud)

你有其他想法吗?像逃避下划线角色的方式?

Cur*_*her 115

我总是用括号做完: '%[_]%'

  • +1请参阅:http://msdn.microsoft.com/en-us/library/ms187489(SQL.90).aspx,"搜索通配符"一节 (8认同)

Lei*_*and 23

要匹配两个下划线,每个下划线都必须放在括号中

'%[__]%' -- matches single _ with anything after

'%[_][_]%' -- matches two consecutive _
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用[和这样的]字符进行转义:

PRINT PATINDEX('%[_]%', '37_21')