patindex t-sql特殊字符

时间:2018-07-09 09:13:22

标签: sql sql-server tsql

如何检查字符串中是否存在任何!@#$%^&*()_-+个特殊字符?

我尝试过

SELECT PATINDEX('!@#$%^&*()_-+', 'test-');  
SELECT PATINDEX('[!@#$%^&*()_-+]', 'test-');  
SELECT PATINDEX('%[!@#$%^&*()_-+]%', 'test-');  

但是所有返回0,应该返回5,有帮助吗?

4 个答案:

答案 0 :(得分:1)

您可以使用取反:

SELECT PATINDEX('%[^a-Z]%', 'test-');

这将找到不在a-Z范围内的字符。

答案 1 :(得分:1)

-LIKEPATINDEX()模式中的特殊字符。如果它不是第一个位置,则它是一个字符范围-例如,所有数字都用[0-9]表示。

您可以通过移动条件来做您想做的事情:

PATINDEX('%[-!@#$%^&*()_+]%', 'test-'), 

不幸的是,PATINDEX()模式不支持转义字符。您也可以将这种逻辑表示为LIKECASE

(CASE WHEN 'test-' LIKE '%[-!@#$%^&*()_+]%' ESCAPE '$' THEN 1 ELSE 0 END)

或使用“非”模式:

(CASE WHEN 'test-' NOT LIKE '%[^0-9a-zA-Z]%' THEN 0 ELSE 1 END)

答案 2 :(得分:0)

SELECT PATINDEX('%[-+!_@()*^#$%&]%', 'test-');  

这解决了我的问题,返回5的-。

显然是重要的事情。

答案 3 :(得分:0)

DECLARE @myString VARCHAR(100) ='test-'
IF (@myString LIKE '%[^a-zA-Z0-9]%')
    PRINT 'Contains "special" characters'
ELSE
    PRINT 'Does not contain "special" characters'