首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查数据库列是否有特殊标志

如何检查数据库列是否有特殊标志
EN

Stack Overflow用户
提问于 2018-04-17 09:36:21
回答 1查看 94关注 0票数 3

我想检查列中有正则表达式的特殊符号,但不是所有特殊符号。我要所有不是字母,数字和,+。-&(空白) .I的签名,试一试

代码语言:javascript
复制
where column like '%[^((a-z)(A-Z)(0-9)(,\+\.\-)(\&)( ))]%'

就像这样

代码语言:javascript
复制
where column like '%[^0-9a-zA-Z ,\-+\.\& ]%'

但是,如果我尝试这个说法,我会得到字符串-和-和斯派齐尔空白。

result1:'t-est regex‘ result2:‘TestJ。‘

你知道为什么吗?

来寻求帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-17 10:33:13

类算子没有完全使用regex语法。简单多了。

但有些事情仍然是可能的。

这样就能得到你想要的:

代码语言:javascript
复制
where [column] like '%[^A-Za-z0-9 &.,+-]%'

注意,类否定式^确实可以工作。

最好将-放在类的末尾。因此,将其用于一系列字符是没有错的。

没有类似的捕获组的概念,所以()被删除了。

但是,如果您也希望类似忽略括号,只需将它们添加到字符类中即可。

(即使在regex中,字符类中也没有捕获组)

当字符字段的排序规则不区分大小写时,类似操作是不区分大小写的.

这似乎是大多数数据库的默认设置。

因此,大多数情况下,LIKE '%[A-Z]%'LIKE '%[A-Za-z]%'的行为都是一样的。

示例片段:

代码语言:javascript
复制
-- using a Case-Sensitive collation for the varchar. 
declare @T table (id int identity(1,1), col varchar(30) COLLATE Latin1_General_CS_AS);

insert into @T (col) values 
('abc123'),
('ABC & 123'),
('abc123 &.,+-'),
('abc-123 #');

select * from @T where col like '%[^A-Za-z0-9 &.,+-]%';

返回:

代码语言:javascript
复制
id  col
--  ---------
4   abc-123 #
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49874663

复制
相关文章

相似问题

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