如何从存储多语言消息的数据表中筛选出内容为俄语的行
俄语消息筛选查询方案
需求背景
现有存储消息内容的数据表,结构示例如下:
id message 1 hi 2 ok 3 துய 4 нет
需要仅返回内容为俄语的行,即上述示例中id=4的记录。
实现方案
俄语使用的西里尔字母对应Unicode编码范围为U+0400 ~ U+04FF,通过正则匹配该范围的字符即可筛选出俄语内容,不同数据库的查询写法如下:
- MySQL 写法
-- 直接匹配俄语字母 SELECT * FROM 表名 WHERE message REGEXP '^[А-Яа-яЁё]+$';
- PostgreSQL 写法
SELECT * FROM 表名 WHERE message ~ '^[А-Яа-яЁё]+$';
- SQLite 写法
SELECT * FROM 表名 WHERE message REGEXP '^[А-Яа-яЁё]+$';
规则说明
- 上述正则仅匹配全部由俄语字符组成的字符串,如果需要匹配包含俄语字符、同时允许夹杂标点、数字等其他内容的记录,可去掉首尾定位符,将正则调整为
[А-Яа-яЁё]即可 - 前三行内容分别为拉丁字母(英语)、泰米尔文字,均不在俄语字符范围内,不会被匹配到,仅俄语内容会返回
内容的提问来源于stack exchange,提问作者user458
相关产品推荐
相关产品推荐

