我有一個表像這樣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