如何检查字符串中是否存在此!@#$%^&*()_-+特殊字符?
我试过了
SELECT PATINDEX('!@#$%^&*()_-+', 'test-');
SELECT PATINDEX('[!@#$%^&*()_-+]', 'test-');
SELECT PATINDEX('%[!@#$%^&*()_-+]%', 'test-'); 但是所有的返回值都是0,它应该返回5,有什么帮助吗?
发布于 2018-07-09 19:01:22
-是LIKE或PATINDEX()模式中的特殊字符。如果它位于第一个位置以外的任何位置,则它是一个字符范围--例如所有数字都由[0-9]表示。
您可以通过移动条件来执行您想要的操作:
PATINDEX('%[-!@#$%^&*()_+]%', 'test-'), 不幸的是,PATINDEX()模式不支持转义字符。您还可以将此逻辑表示为LIKE和CASE
(CASE WHEN 'test-' LIKE '%[-!@#$%^&*()_+]%' ESCAPE '$' THEN 1 ELSE 0 END)或者使用"not“模式:
(CASE WHEN 'test-' NOT LIKE '%[^0-9a-zA-Z]%' THEN 0 ELSE 1 END)发布于 2018-07-09 17:22:49
你可以使用否定:
SELECT PATINDEX('%[^a-Z]%', 'test-');这将找到一个不在a-Z范围内的字符。
发布于 2018-07-09 17:39:27
SELECT PATINDEX('%[-+!_@()*^#$%&]%', 'test-'); 这解决了我的问题,返回5 -的位置。
显然,顺序很重要。
https://stackoverflow.com/questions/51241928
复制相似问题