📌  相关文章
📜  在sql中拆分名字和姓氏(1)

📅  最后修改于: 2023-12-03 15:07:56.442000             🧑  作者: Mango

在 SQL 中拆分名字和姓氏

在某些业务场景下,我们需要在 SQL 中将用户的姓名拆分为名字和姓氏,以便进行更精细的数据处理。以下是几种实现的方法。

使用 SUBSTRING_INDEX() 函数

SUBSTRING_INDEX(expr,delim,count) 函数能够从一个字符串(或字段)中获取指定个数的子字符串,使用的分隔符为第二个参数。当 count 为正数时,返回的是从左侧开始的子字符串;当 count 为负数时,返回的是从右侧开始的子字符串。

SELECT 
  SUBSTRING_INDEX('Feng, Sophia', ', ', -1) AS first_name, 
  SUBSTRING_INDEX('Feng, Sophia', ', ', 1) AS last_name

输出:

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Sophia     | Feng      |
+------------+-----------+
使用 LEFT() 和 RIGHT() 函数

此方法依赖于已知姓名的分割字符,通常情况下为空格。LEFT() 函数返回字符串左侧指定个数的字符,而 RIGHT() 函数返回字符串右侧指定个数的字符。

SELECT 
  LEFT('Sophia Feng', LENGTH('Sophia Feng') - POSITION(' ' IN 'Sophia Feng')) AS first_name, 
  RIGHT('Sophia Feng', POSITION(' ' IN REVERSE('Sophia Feng')) - 1) AS last_name

输出:

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Sophia     | Feng      |
+------------+-----------+
使用 SUBSTRING() 函数

SUBSTRING() 函数在实现上与 SUBSTRING_INDEX() 函数类似,只不过不考虑分隔符,而是基于长度截取字符串。此方法需要先找到名字在全名中的起始位置,代码如下:

SELECT 
  SUBSTRING('Sophia Feng', 1, LENGTH('Sophia Feng') - LENGTH(SUBSTRING_INDEX('Sophia Feng', ' ', -1))) AS first_name, 
  SUBSTRING('Sophia Feng', LENGTH(SUBSTRING_INDEX('Sophia Feng', ' ', -1)) + 2) AS last_name

输出:

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Sophia     | Feng      |
+------------+-----------+

无论采用哪种方法,都可以通过一些简单的函数和处理方式在 SQL 中拆分名字和姓氏。