我尝试使用通用regex属性和NOT LIKE
子句查找特殊字符,但结果令人困惑。研究表明,它的工作方式与SQL Server或其他地方不同。
1.用于查找是否存在任何字符
1.用于查找是否有任何数字
1.用于查找是否存在任何特殊字符
当分别查找非数字数据是否可用以及非字母数据是否存在时,like '%[^0-9]%'
或'%[^a-Z]%'
不能很好地工作
SELECT column1 from some_table where column1 like '%[^0-9]%';
SELECT column1 from some_table where column1 like '%[^a-Z]%'
SELECT column1 from some_table where column1 like '%[^a-Z0-9]%'
字符串
还注意到人们使用-> NOT like '%[^0-9]%'
2条答案
按热度按时间vyu0f0g11#
Posterre
LIKE
不支持正则表达式。您需要使用正则表达式运算子**
~
**。标准SQL还将
SIMILAR TO
定义为上述内容的奇怪组合,但不使用它。请参阅:用于查找是否有字符
...表示 * 任何字符 *:
字符串
所以既不是NULL也不是空的。请参阅:
...表示任何 * 字母字符 *(字母):
型
[[:alpha:]]
是所有字母字符的字符类-不仅仅是ASCII字母[A-Za-z]
,还包括[ÄéÒçòý]
等字母。用于查找是否有编号
...表示任何 * 数字 *:
型
\d
是[[:digit:]]
的类简写。用于查找是否有特殊字符
...表示除数字和字母以外的任何内容:
型
\W
是[^[:alnum:]_]
的类简写(下划线 * 不包括 * -手册目前在那里很混乱)。.表示除数字、字母和普通空格之外的任何内容:
型
这是
\W
类的简写,另外还不包括普通空格。...表示除数字、字母和白色之外的任何内容:
型
这一次不包括Posix字符类 space 定义的所有白色。关于Unicode中的“白色”:
...表示任何非ASCII字符:
如果您的DB集群使用UTF8编码运行,则有一个简单、非常快速的破解方法:
型
octet_length()
计算字符串中的 * 字节 *,而length()
(别名:character_length()
或char_length()
)统计字符串中的 * 字符 *。所有基本ASCII字符([\x00-\x7F]
)均使用UTF-8中的1个字节进行编码,所有其他字符均使用2 - 4个字节进行编码。字符串中的任何非ASCII字符都构成表达式true
。进一步阅读:
3vpjnl9f2#
问题是您错误地使用了
LIKE
。LIKE
无法识别这些模式。使用
~
进行正则表达式匹配:字符串
或者更恰当地说:
型
这将返回字符类中未指定字符的任何列。
Here是一个db<>fiddle。