MySQL利用拆分技巧,将一列转化为多列(mysql 一列变多列)

MySQL:利用拆分技巧,将一列转化为多列

在MySQL中,存在将一列数据拆分成多个列的需求。例如,某表中有一“city_state”列,包含“城市、州”两类信息,需要拆分成“city、state”两列进行处理。本文将介绍在MySQL中利用拆分技巧,将一列转化为多列。

方法一:使用SUBSTRING_INDEX函数

SUBSTRING_INDEX函数可以返回字符串中某个分隔符之前或之后指定的“n”个单元组成的子串。

示例表及数据:

CREATE TABLE test(
id INT PRIMARY KEY,
city_state VARCHAR(20)
);

INSERT INTO test VALUES (1, 'Beijing, China'),
(2, 'New York, United States'),
(3, 'Tokyo, Japan');

需求:将“city_state”列的内容拆分成“city、state”两列。

代码:

SELECT 
id,
SUBSTRING_INDEX(city_state,',',1) AS city,
SUBSTRING_INDEX(city_state,',',-1) AS state
FROM test;

执行结果:

+----+----------+---------+
| id | city | state |
+----+----------+----------+
| 1 | Beijing | China |
| 2 | New York | United States |
| 3 | Tokyo | Japan |
+----+----------+----------+

方法二:使用REGEXP_SUBSTR函数

REGEXP_SUBSTR函数可以用于匹配字符串中的子串。另外,MySQL的正则表达式语法并不支持零宽度正向或负向断言,因此需要使用特殊的写法实现该功能。

示例表及数据同方法一。

需求:将“city_state”列的内容拆分成“city、state”两列。

代码:

SELECT 
id,
REGEXP_SUBSTR(city_state, '^[^,]+') AS city,
REGEXP_SUBSTR(city_state, '(?
FROM test;

执行结果:

+----+----------+-----------+
| id | city | state |
+----+----------+-----------+
| 1 | Beijing | China |
| 2 | New York | United States |
| 3 | Tokyo | Japan |
+----+----------+-----------+

方法三:使用CASE语句

CASE语句对于多列的情况比较适用。根据字符串中的逗号进行分割,并根据条件选择输出结果。

示例表及数据同方法一。

需求:将“city_state”列的内容拆分成“city、state”两列。

代码:

SELECT 
id,
CASE WHEN INSTR(city_state,',') > 0
THEN SUBSTRING(city_state,1,INSTR(city_state,',')-1)
ELSE city_state
END AS city,
CASE WHEN INSTR(city_state,',') > 0
THEN SUBSTRING(city_state,INSTR(city_state,',')+1)
ELSE ''
END AS state
FROM test;

执行结果:

+----+----------+-----------+
| id | city | state |
+----+----------+-----------+
| 1 | Beijing | China |
| 2 | New York | United States |
| 3 | Tokyo | Japan |
+----+----------+-----------+

在MySQL中,拆分一列数据为多个列有三种方法,分别是使用SUBSTRING_INDEX函数、REGEXP_SUBSTR函数和CASE语句。具体使用哪种方法,可以根据实际情况进行选择。


数据运维技术 » MySQL利用拆分技巧,将一列转化为多列(mysql 一列变多列)