gpt4 book ai didi

sql - 如何检查数据库列的特殊符号

转载 作者:行者123 更新时间:2023-12-02 02:55:02 27 4
gpt4 key购买 nike

我想用正则表达式检查一列是否有特殊符号,但不是所有特殊符号。我想要所有不是字母、数字而不是 ,+.-&(空白)的符号。我试试这个

where column like '%[^((a-z)(A-Z)(0-9)(,\+\.\-)(\&)( ))]%'

像这样

where column like '%[^0-9a-zA-Z ,\-+\.\& ]%'

但是如果我尝试这个语句,我会得到带有 - 和 speziell 空白的字符串。

result1: 't-est regex'

result2: ' TestJ. '

你知道为什么吗?

感谢您的帮助。

最佳答案

LIKE operator不完全使用正则表达式语法。它的方式更加简化。

但有些事情还是有可能的。

这个 LIKE 会得到你想要的:

where [column] like '%[^A-Za-z0-9 &.,+-]%'

请注意,类否定 ^ 确实有效。
并且最好在类的末尾放一个-。所以它不会被错误地用于一系列字符。

LIKE 中没有捕获组的概念,因此删除了 ()
但是,如果您还希望 LIKE 忽略括号,只需将它们添加到字符类即可。
(即使在正则表达式中,字符类中也没有捕获组)

当字符字段的COLLATION不区分大小写时,LIKE操作不区分大小写。
这似乎是大多数数据库的默认设置。
所以大多数时候,LIKE '%[A-Z]%'LIKE '%[A-Za-z]%' 的行为相同。

示例片段:

-- 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 &.,+-]%';

返回:

id  col
-- ---------
4 abc-123 #

关于sql - 如何检查数据库列的特殊符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49874663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com