2017-06-02 14 views
0

私はこの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  | 
+----+--------------+------------+---------------+------------+-------+------------+ 

がリストされているがどのような私が必要とする:

  1. ほとんどが、tel_Xから文字を削除 ' - '
  2. は余分コムを残します
  3. しかし、私は、各レコードのLOOPこれをすることはできません、私は#3のために保存作成機能のMySQLに管理

「0123」 に「0123」から、フォーマットを修正しないUTF-8の数を作るtel_X_descにメンターそして、更新......

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; 

私はデータベースフィールドにはかなり新しいですし、私はこの問題を解決することができる何かを見つけよう....

+0

あなたはそれをチェックするだけで、あなたはそれをチェックする必要はないでしょうが、挿入するときに秩序を保つことは可能でしょうか? – inetphantom

+1

他のアイデアは、それを魔女にすることです(https://dev.mysql.com/doc/refman/5.7/en/cursors.html)。しかし、奨励バーマー更新 – inetphantom

+0

はい、私はいくつかの研究を行い、カーソルとフェッチが使えるようになりました。別の機能や手順で機能を使用することはできますか? – Kazuaki

答えて

1

UPDATEクエリで関数を呼び出します。

UPDATE test 
SET tel_1 = multibyte2cv(tel_1), tel_2 = multibyte2cv(tel_2), tel_3 = multibyte2cv(tel_3) 
+0

ありがとう、それは#3で働いていましたが、#1と#2をやる必要があります。私はそれらのための別の関数を作成し、同じコードを実行する方が簡単だろうと思う。 – Kazuaki

+0

'-'のような特定の文字を削除するのに' REPLACE() '関数を使うことができます。残念ながら、特定の範囲を除くすべての文字を削除する組み込み関数はありません。ただし、これに便利な 'REGEXP_REPLACE()' UDFを検索することができます。 – Barmar