首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >patindex t-sql特殊字符

patindex t-sql特殊字符
EN

Stack Overflow用户
提问于 2018-07-09 17:13:22
回答 4查看 4.6K关注 0票数 2

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

我试过了

代码语言:javascript
复制
SELECT PATINDEX('!@#$%^&*()_-+', 'test-');  
SELECT PATINDEX('[!@#$%^&*()_-+]', 'test-');  
SELECT PATINDEX('%[!@#$%^&*()_-+]%', 'test-');  

但是所有的返回值都是0,它应该返回5,有什么帮助吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-09 19:01:22

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

您可以通过移动条件来执行您想要的操作:

代码语言:javascript
复制
PATINDEX('%[-!@#$%^&*()_+]%', 'test-'), 

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

代码语言:javascript
复制
(CASE WHEN 'test-' LIKE '%[-!@#$%^&*()_+]%' ESCAPE '$' THEN 1 ELSE 0 END)

或者使用"not“模式:

代码语言:javascript
复制
(CASE WHEN 'test-' NOT LIKE '%[^0-9a-zA-Z]%' THEN 0 ELSE 1 END)
票数 4
EN

Stack Overflow用户

发布于 2018-07-09 17:22:49

你可以使用否定:

代码语言:javascript
复制
SELECT PATINDEX('%[^a-Z]%', 'test-');

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

票数 1
EN

Stack Overflow用户

发布于 2018-07-09 17:39:27

代码语言:javascript
复制
SELECT PATINDEX('%[-+!_@()*^#$%&]%', 'test-');  

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

显然,顺序很重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51241928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档