1

次の表があります。

|-------------------|
| id | Homephone    |
|-------------------|
| 1  | 454454125    |
| 2  | 47872154587  |
| 3  | 128795423    |
| 4  | 148784474    |
|-------------------|

テーブルには約 40.000 行あります。

次のように値をフォーマットしたいHomephone

454-454-125 
478-721-545-87
128-795-423
148-784-474

つまり、必要な 3 つの数字-(ハイフン) ごとに。
MySQL を使用してこれを達成するにはどうすればよいですか?

4

2 に答える 2

1

あなたはこれのためにudfを目撃する必要があります

于 2012-07-07T11:59:13.363 に答える
1

基本的に、独自の関数(いわゆるUDF-ユーザー定義関数)を作成し、それをテーブルで実行する必要があります。MySQLリファレンスマニュアルの文字列関数の章に
投稿されたAndrewHannaによる素晴らしい関数があります。そこで小さな間違いを修正しました(に置き換えられました。2 つのステップ(2つのSQLクエリ)があります:WHILE (i < str_len) DOWHILE (i <= str_len) DO

  1. 関数を作成します。次の3つのパラメータがstrあります。-変更posする文字列、-文字列に挿入される文字の位置、-挿入する文字delimit

    DELIMITER //
    CREATE FUNCTION insert_characters(str text, pos int, delimit varchar(124))
    RETURNS text
    DETERMINISTIC
    BEGIN
        DECLARE i INT DEFAULT 1;
        DECLARE str_len INT;
        DECLARE out_str text default '';
        SET str_len = length(str);
        WHILE (i <= str_len) DO
            SET out_str = CONCAT(out_str, SUBSTR(str, i, pos), delimit);
            SET i = i + pos; 
        END WHILE;
        -- trim delimiter from end of string
        SET out_str = TRIM(trailing delimit from out_str);
        RETURN(out_str);
    END//
    DELIMITER ;
    
  2. 関数を実行します...

    • ...テスト目的(選択、更新なし):

      SELECT insert_characters(Homephone, 3, "-") AS new_phone FROM my_table;
      
    • ...レコードを更新するには:

      UPDATE my_table SET Homephone = insert_characters(Homephone, 3, "-");
      

関数を1行ずつ分析してみてください。この例は、主題を理解するのに役立つ場合があります。

于 2012-07-07T12:43:31.323 に答える