MYSQL判断中文、英文、日文常用语句
mysql提供了REGEXP关键字来判断一个字符串和一个正则表达式是否匹配,可以作为判断字符串是否是纯中文或纯英文等的依据。
正则表达式 | 匹配 |
---|---|
[一-龥] | 中文字符 |
[ a-zA-Z] | 英文字母 |
[ 0-9] | 数字 |
[ぁ-ゞァ-ヾ] | 日文字符 |
正则表达式[?-?]表示匹配某一范围的字符,可以有多个不连续范围;[^?-?](范围前加否定^)表示匹配不在该范围内的字符
1.含中文字符的字符串
判断字符串含有中文字符直接匹配即可
//选取含有中文字符的title
SELECT title
FROM magnetlib.magnets
WHERE (magnets.title REGEXP '[一-龥]');
2.仅含中文字符的字符串
判断字符串仅含有中文字符(纯中文字符串),可以将字符串与非中文字符的正则表达式匹配,选取匹配失败的(不含非中文字符)
#纯中文字符串
SELECT title
FROM magnetlib.magnets
WHERE (magnets.title not REGEXP '[^一-龥]');
同理,
3.仅含中文字符和数字的字符串
#仅含数字中文字符串
SELECT title
FROM magnetlib.magnets
WHERE (magnets.title not REGEXP '[^一-龥^0-9]');
4.仅含英文字母和数字的字符串
#纯英文字母和数字字符
SELECT title
FROM magnetlib.magnets
WHERE
magnets.title not REGEXP '[^a-z^A-Z^0-9]';
5.含日文字符的字符串
#含日文字符串
SELECT title
FROM magnetlib.magnets
WHERE
magnets.title REGEXP '[ぁ-ゞァ-ヾ]'
6.不含中文或日文的字符串
#非中文或日文字符串
SELECT title
FROM magnetlib.magnets
WHERE
magnets.title not REGEXP '[一-龥ぁ-ゞァ-ヾ]';
补充
用另一种方法也能判断字符串是否只含英文和数字,这种方法是基于LENGTH函数和CHAR_LENGTH函数的
Length()为存储长度,一个英文字符(ASCII码小于128的)为1,其它的存储长度为3
Char_Length()为字符串长度,是字符的个数
//选取仅含英文字符的
SELECT
title
FROM
magnetlib.magnets t
WHERE LENGTH(title) = CHAR_LENGTH(title);
//选取不含英文字符的
SELECT
title
FROM
magnetlib.magnets t
WHERE LENGTH(title) = 3*CHAR_LENGTH(title);