如何检查字符串中是否存在任何!@#$%^&*()_-+
个特殊字符?
我尝试过
SELECT PATINDEX('!@#$%^&*()_-+', 'test-');
SELECT PATINDEX('[!@#$%^&*()_-+]', 'test-');
SELECT PATINDEX('%[!@#$%^&*()_-+]%', 'test-');
但是所有返回0,应该返回5,有帮助吗?
答案 0 :(得分:1)
您可以使用取反:
SELECT PATINDEX('%[^a-Z]%', 'test-');
这将找到不在a-Z范围内的字符。
答案 1 :(得分:1)
-
是LIKE
或PATINDEX()
模式中的特殊字符。如果它不是第一个位置,则它是一个字符范围-例如,所有数字都用[0-9]
表示。
您可以通过移动条件来做您想做的事情:
PATINDEX('%[-!@#$%^&*()_+]%', 'test-'),
不幸的是,PATINDEX()
模式不支持转义字符。您也可以将这种逻辑表示为LIKE
和CASE
:
(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'