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 stateFROM 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 stateFROM test;
执行结果:
+----+----------+-----------+
| id | city | state |+----+----------+-----------+
| 1 | Beijing | China || 2 | New York | United States |
| 3 | Tokyo | Japan |+----+----------+-----------+
在MySQL中,拆分一列数据为多个列有三种方法,分别是使用SUBSTRING_INDEX函数、REGEXP_SUBSTR函数和CASE语句。具体使用哪种方法,可以根据实际情况进行选择。