请求编写按空格分词的查询语句,实现特定姓名拆分规则
姓名拆分查询语句(按空格分词,单词数≤3时拆分规则)
拆分规则
- 当姓名按空格分词后的单词数量≤3时,第一个单词作为姓氏(last name),剩余所有单词拼接为名字(first name)
MySQL 实现语句
假设姓名存储在表user_info的full_name字段中:
SELECT SUBSTRING_INDEX(full_name, ' ', 1) AS `last name`, TRIM(SUBSTRING(full_name, LOCATE(' ', full_name))) AS `first name` FROM user_info WHERE LENGTH(full_name) - LENGTH(REPLACE(full_name, ' ', '')) + 1 <= 3;
- 逻辑说明:
SUBSTRING_INDEX(full_name, ' ', 1):截取第一个空格前的内容作为姓氏TRIM(SUBSTRING(full_name, LOCATE(' ', full_name))):从第一个空格后截取内容并去除首尾空格,作为名字WHERE条件:通过计算空格数量+1得到单词数,筛选出单词数≤3的记录
PostgreSQL 实现语句
同样基于表user_info的full_name字段:
SELECT SPLIT_PART(full_name, ' ', 1) AS "last name", TRIM(BOTH ' ' FROM REGEXP_REPLACE(full_name, '^[^ ]+ ', '')) AS "first name" FROM user_info WHERE array_length(string_to_array(full_name, ' '), 1) <= 3;
- 逻辑说明:
SPLIT_PART(full_name, ' ', 1):按空格拆分后取第一个部分作为姓氏REGEXP_REPLACE(full_name, '^[^ ]+ ', ''):替换掉开头的第一个单词及后续空格,再用TRIM清理多余空格得到名字WHERE条件:将姓名转为数组后获取长度,筛选单词数≤3的记录
示例验证
输入姓名:Daniel Thomas Kon
查询结果如下:
| last name | first name |
|---|---|
| Daniel | Thomas Kon |
内容的提问来源于stack exchange,提问作者Nidhi
相关产品推荐
相关产品推荐

