postgresql 测试列中的特殊字符或仅字符/数字

qacovj5a  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(182)

我尝试使用通用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]%'

vyu0f0g1

vyu0f0g11#

Posterre LIKE不支持正则表达式。
您需要使用正则表达式运算子**~**。
标准SQL还将SIMILAR TO定义为上述内容的奇怪组合,但不使用它。请参阅:

用于查找是否有字符
...表示 * 任何字符 *:

... WHERE col <> '';                        -- any character at all?

字符串
所以既不是NULL也不是空的。请参阅:

  • 检查“空值”的最佳方法

...表示任何 * 字母字符 *(字母):

... WHERE col ~ '[[:alpha:]]';              -- any letters?


[[:alpha:]]是所有字母字符的字符类-不仅仅是ASCII字母[A-Za-z],还包括[ÄéÒçòý]等字母。
用于查找是否有编号
...表示任何 * 数字 *:

... WHERE col ~ '\d';                       -- any digits?


\d[[:digit:]]的类简写。
用于查找是否有特殊字符
...表示除数字和字母以外的任何内容:

... WHERE col ~ '\W';                       -- anything but digits & letters?


\W[^[:alnum:]_]的类简写(下划线 * 不包括 * -手册目前在那里很混乱)。
.表示除数字、字母和普通空格之外的任何内容:

... WHERE col ~ '[^[:alnum:]_ ]'            -- ... and space


这是\W类的简写,另外还不包括普通空格。
...表示除数字、字母和白色之外的任何内容:

... WHERE col ~ '[^[:alnum:]_\s]'           -- ... and any white space
... WHERE col ~ '[^[:alnum:]_[:space:]]'    -- ... the same spelled out


这一次不包括Posix字符类 space 定义的所有白色。关于Unicode中的“白色”:

  • 使用PostgreSQL修剪尾随空格

...表示任何非ASCII字符:
如果您的DB集群使用UTF8编码运行,则有一个简单、非常快速的破解方法:

... WHERE octet_length(col) > length(col);  -- any non-ASCII letter?


octet_length()计算字符串中的 * 字节 *,而length()(别名:character_length()char_length())统计字符串中的 * 字符 *。所有基本ASCII字符([\x00-\x7F])均使用UTF-8中的1个字节进行编码,所有其他字符均使用2 - 4个字节进行编码。字符串中的任何非ASCII字符都构成表达式true
进一步阅读:

3vpjnl9f

3vpjnl9f2#

问题是您错误地使用了LIKELIKE无法识别这些模式。
使用~进行正则表达式匹配:

select column1 from some_table where column1 ~ '[^a-Z0-9]'

字符串
或者更恰当地说:

select column1 from some_table where column1 ~ '[^a-zA-Z0-9]'


这将返回字符类中未指定字符的任何列。
Here是一个db<>fiddle。

相关问题