首页 > 解决方案 > patindex t-sql 特殊字符

问题描述

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

我试过了

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

但全部返回 0,它应该返回 5,有什么帮助吗?

标签: sqlsql-servertsql

解决方案


the是or模式-中的一个特殊字符。如果它在第一个位置以外的任何位置,则它是一个字符范围 - 例如所有数字都由.LIKEPATINDEX()[0-9]

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

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

不幸的是,PATINDEX()模式不支持转义字符。您还可以将此逻辑表示为LIKEand 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)

推荐阅读