我在MySQL表中有一个列,其中包含一个由代码和标题组成的字符串,我需要将它们分成两个单独的列。
目前,只有title
列包含数据。我可以将title
复制到code
,但之后我想删除包含title
列中数字的子字符串,并删除包含来自code
数字的 的子字符串}专栏。
示例值看起来像 NWAB110438 Lagoon ,我希望 NWAB110438 位于code
和{em> Lagoon {{1} }。
我知道如何选择包含数字的记录,但不知道如何删除包含数字的子字符串。
修改
我还应该补充一点,有时带数字的子字符串将在没有它的子字符串之后,有时列只包含一个子字符串,因此以下是所有可能的值:
所以似乎substring_index总是不匹配正确的值。
答案 0 :(得分:1)
使用SUBSTRING_INDEX,INSTR,REGEXP和完整演示的解决方案。
SQL:
-- data
create table t1(title varchar(100), code varchar(100));
insert into t1 values
('NWAB110438 Lagoon', 'NWAB110438 Lagoon'),
('Lagoon NWAB110438', 'Lagoon NWAB110438'),
('Lagoon', 'Lagoon'),
('NWAB110438', 'NWAB110438');
select * from t1;
-- query wanted
UPDATE t1
SET
title = TRIM(CONCAT(IF((@first := SUBSTRING_INDEX(title, ' ', 1)) REGEXP '[0-9]+', '', @first),
' ',
IF((@second := IF(INSTR(title, ' '), SUBSTRING_INDEX(title, ' ', -1), '')) REGEXP '[0-9]+', '', @second))),
code = TRIM(CONCAT(IF(@first REGEXP '[0-9]+', @first, ''),
' ',
IF(@second REGEXP '[0-9]+', @second, '')));
select * from t1;
输出:
mysql> select * from t1;
+-------------------+-------------------+
| title | code |
+-------------------+-------------------+
| NWAB110438 Lagoon | NWAB110438 Lagoon |
| Lagoon NWAB110438 | Lagoon NWAB110438 |
| Lagoon | Lagoon |
| NWAB110438 | NWAB110438 |
+-------------------+-------------------+
4 rows in set (0.00 sec)
mysql> UPDATE t1
-> SET
-> title = TRIM(CONCAT(IF((@first := SUBSTRING_INDEX(title, ' ', 1)) REGEXP '[0-9]+', '', @first),
-> ' ',
-> IF((@second := IF(INSTR(title, ' '), SUBSTRING_INDEX(title, ' ', -1), '')) REGEXP '[0-9]+', '', @second))),
-> code = TRIM(CONCAT(IF(@first REGEXP '[0-9]+', @first, ''),
-> ' ',
-> IF(@second REGEXP '[0-9]+', @second, '')));
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from t1;
+--------+------------+
| title | code |
+--------+------------+
| Lagoon | NWAB110438 |
| Lagoon | NWAB110438 |
| Lagoon | |
| | NWAB110438 |
+--------+------------+
4 rows in set (0.00 sec)
答案 1 :(得分:0)
在这种情况下,我建议使用php来执行单独的功能
对于纯MySQL,我找到了一个可能对你有帮助的链接。
选择SUBSTRING_INDEX(' www.mytestpage.info','。',2);
http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php
答案 2 :(得分:0)
在这种情况下,您可以使用substring_index()
来提取字符串的一部分。