You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中匹配不同语言字母及查找非ASCII字母序列?

在PostgreSQL中查找非ASCII字母序列的方法

PostgreSQL支持Unicode正则表达式属性,这是精准定位非ASCII字母的核心,以下是几种实用实现方式:

方法1:使用Unicode正则匹配非ASCII字母

利用\p{L}匹配所有Unicode字母,再通过交集规则排除ASCII字母,直接定位非ASCII字母序列:

-- 查找包含非ASCII字母的记录
SELECT your_column
FROM your_table
WHERE your_column ~ '[\p{L}&&[^A-Za-z]]';

如果需要提取字段中的非ASCII字母序列,可搭配regexp_matches函数:

-- 提取所有非ASCII字母序列(g参数表示全局匹配)
SELECT your_column, regexp_matches(your_column, '[\p{L}&&[^A-Za-z]]+', 'g') AS non_ascii_letters
FROM your_table
WHERE your_column ~ '[\p{L}&&[^A-Za-z]]';

方法2:结合ascii()函数判断

通过ascii()函数获取字符的Unicode码点(ASCII字符码点≤127),同时验证是否为字母:

-- 筛选单个非ASCII字母字符
SELECT ch
FROM (VALUES ('A'), ('Ñ'), ('ü'), ('Ä'), ('5'), ('@')) AS t(ch)
WHERE ascii(ch) > 127 AND ch ~ '\p{L}';

针对字段内容,可先过滤非字母字符,再检查是否存在非ASCII内容:

SELECT your_column
FROM your_table
WHERE ascii(regexp_replace(your_column, '[^\p{L}]', '', 'g')) > 127;

与SQL Server的差异说明

SQL Server中@ch BETWEEN 'A' and 'Z'能匹配Ñ、ü这类字符,是因为其默认排序规则包含扩展ASCII字符范围;而PostgreSQL默认按Unicode码点排序,直接用BETWEEN无法覆盖这类字符,必须借助Unicode正则属性才能匹配所有语言的字母。

内容的提问来源于stack exchange,提问作者Jitendra Loyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:37:49