sql >> データベース >  >> RDS >> Mysql

MySQLのカンマ区切り文字列を一時テーブルに分割

    これは、 Mysqlで列を分割できますか?<とほぼ同じ質問です。 / a>

    MySQLには文字列分割関数がないため、回避策を実行する必要があります。上記の回答ページに記載されている方法のいずれかを使用してデータを分割すると、データに対して何でも実行できます。

    そのカスタム関数をループして、空になったら中断することができます。いくつかの構文を再生して学習する必要があります(または少なくとも私はそうします)が、mysqlのFORループの構文は次のとおりです: http://www.roseindia.net/sql/mysql-example/for.shtml

    以下の関数で位置をインクリメントして、それを繰り返すことができます:

    CREATE FUNCTION SPLIT_STR(
      x VARCHAR(255),
      delim VARCHAR(12),
      pos INT
    )
    RETURNS VARCHAR(255)
    RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
           LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
           delim, '');
    

    (クレジット: https://blog.fedecarg.com / 2009/02/22 / mysql-split-string-function /

    一致するものが見つからない場合は''を返す必要があるため、一致するものが見つからない場合はループを解除します。これにより、mysqlのみで分割文字列を解析し、一時テーブルに挿入クエリを実行できます。しかし、その種の作業にphpのようなスクリプト言語を使用しないのはなぜですか? :(

    ループ構文のコード:

    DELIMITER $$  
    
    CREATE PROCEDURE ABC(fullstr)
    
       BEGIN
          DECLARE a INT Default 0 ;
          DECLARE str VARCHAR(255);
          simple_loop: LOOP
             SET a=a+1;
             SET str=SPLIT_STR(fullstr,"|",a);
             IF str='' THEN
                LEAVE simple_loop;
             END IF;
             #Do Inserts into temp table here with str going into the row
             insert into my_temp_table values (str);
       END LOOP simple_loop;
    END $$
    


    1. MYSQL ORDERBYCASEの問題

    2. SQLServerでクエリタイムアウトを強制する

    3. Oracleデータベースと一致するように多数の文字列をロードする方法は?

    4. Oracleでパスワードを暗号化する方法は?