SQL like - 选择包含未指定字符的字符串

标签 sql regex sql-like

首先,如果这是一个重复的问题,我们深表歉意。我已尽力搜索但没有成功,而且我什至无法用关键字正确表达我的问题!

我的一个表有一列Name (nvarchar)。我想找出哪些行包含特殊字符而不明确列出这些字符。在我的例子中,“特殊”字符意味着任何不在以下内容中的字符:

a-z A-Z 0-9 _ @ . , ( ) % + -

例如:

Row 1: 'asdf Asdf 0123'
Row 2: 'asdf (Asdf) 012/3'
Row 3: 'zxcv [234]'
Row 4: 'asdf #0123'

我想选择第 2、3 和 4 行。

最简单的方法是包含我不需要的字符,例如方括号和斜杠:

SELECT * FROM Table
WHERE Name LIKE '%[\]\[/]%' ESCAPE '\'

这将返回第 2 行和第 3 行,或者如果我使用 NOT LIKE,则返回第 1 行和第 4 行。但是,我还想找到我可能没有想到的其他字符(例如 #)。列出想要的角色 -

SELECT * FROM Table
WHERE Name NOT LIKE '%[a-zA-Z0-9_@. ,()%+-]%'

也不起作用,因为它返回 0 个结果,因为所有行都至少包含 1 个这些字符。

有没有办法限制后一个 LIKE 语句不匹配包含我所需字符的任何字符串,而是包含所需字符而不包含其他任何内容的字符串?

最佳答案

在 MySQL 中你可以这样做:

WHERE Name REGEX '[^-a-zA-Z0-9.,()%+]'

不确定 SQL Server 中是否存在相同的 REGEX 运算符,但可能有类似的东西。

关于SQL like - 选择包含未指定字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759825/

相关文章:

c# - 如何将整个字符串匹配为具有单个正则表达式的两种格式之一?

mysql - 为什么 MATCH AGAINST 返回的结果与 LIKE 不同?

string - 如何在sql的where子句中使用like和substring

sql - mysql - 通过 1 个查询从 2 个表获取详细信息

SQL-Server 将 "USE"与 INNER JOINS 和 "UNION"一起使用

sql - 如何查找链接表中的所有重复项?

mysql : select aggregated values in between dates

c# - 当字符串中的字符更改时,RegEx 拆分/标记字符串

javascript - 正则表达式:包含字符串精确 n 次

mysql - 带有特殊字符的全文,用于在 json 中替换。怎么了?