我有一个表像这样MySQL数据库清洗使用存储功能,程序
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`tel_1` text,
`tel_2` text,
`tel_3` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+----+------------------------------------+-----------------------------------------------+-------+
| id | tel_1 | tel_2 | tel_3 |
+----+------------------------------------+-----------------------------------------------+-------+
| 1 | 123-412-3455 | 1276ー364739−181 | NULL |
| 2 | 714-212-3839 Not Using | No Info | NULL |
| 3 | 12+13E | NULL | NULL |
| 4 | 0123ー3432-1233 Ext : 602 | NULL | NULL |
+----+------------------------------------+-----------------------------------------------+-------+
而且我想清理数据像下面这样:
+----+--------------+------------+---------------+------------+-------+------------+
| id | tel_1 | tel_1_desc | tel_2 | tel_2_desc | tel_3 | tel_3_desc |
+----+--------------+------------+---------------+------------+-------+------------+
| 1 | 1234123455 | NULL | 1276364739181 | NULL | NULL | NULL |
| 2 | 7142123839 | Not Using | NULL | No Info | NULL | NULL |
| 3 | 12+13E | NULL | NULL | NULL | NULL | NULL |
| 4 || Ext : 602 | NULL | NULL | NULL | NULL |
+----+--------------+------------+---------------+------------+-------+------------+
这里是什么名单我需要:
- 删除字符从tel_X,大多是 ' - '
- 留下额外COM彪在tel_X_desc
- 做不是UTF-8号到正确的格式,从“0123”到 “0123”
我设法到MySQL创建存储功能#3,但我不能LOOP这个为每个记录和更新......
CREATE FUNCTION `multibyte2cv`(`str` TEXT) RETURNS text CHARSET utf8
BEGIN
DECLARE int_len INT(2);
DECLARE int_z VARCHAR(10) DEFAULT '1234567890';
DECLARE int_h VARCHAR(10) DEFAULT '1234567890';
SET int_len = CHAR_LENGTH(int_z);
WHILE int_len > 0 DO
SET str = REPLACE(str, SUBSTRING(int_z,int_len,1), SUBSTRING(int_h,int_len,1));
SET int_len = int_len - 1;
END WHILE;
RETURN str;
END;
我非常新的数据库字段,并试图找到的东西,我可以解决这个问题....
是否有可能在插入的时候检查它是否不必清理,但在插入时保持顺序?从设计角度来看,这将更容易.. – inetphantom
其他想法是做一个女巫[游标](https://dev.mysql.com/doc/refman/5.7/en/cursors.html),但优先barmars更新 – inetphantom
是的,我做了一些研究,游标和取指可以使用。我可以在另一个功能或程序中使用功能吗? – Kazuaki