Read it later.

Web製作に関するサーバ構成やコーディングネタの備忘録として使ってます。

*

[MySQL] ランダム文字列の生成

      2013/10/01

「指定された文字の構成で、ランダムの文字列を生成する。」
よく使うのだけど、なかなか共通の関数として実装されていない機能ですよね。

実際作ってみると、かなり重宝してるのでアップしてみました。

--# ファンクションの削除
DROP FUNCTION randomkey;
DELIMITER //
CREATE FUNCTION randomkey(
    p_seed_char                         text
  , p_key_length                        int
) RETURNS TEXT
BEGIN
/* --+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
[処理概要]
    文字列p_seed_charをもとに p_key_length文字分をランダム文字列を生成
[出力パラメタ]
    p_rtn_random_string                 処理結果(正常終了時は空文字、異常発生時にはその内容を文字列で格納します。)
[入力パラメタ]
    p_seed_char                         : ランダム文字列を構成する文字群
  , p_key_length                        : 生成するランダム文字列の長さ
[カスタムエラー]
  1|更新対象となる入稿広告が見つかりません。
[実行例]
SELECT
    randomkey(
      '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    , 10
  ) AS randomkey
;
--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-- */

--#-------------------------------------------------------------------
--# 変数宣言
--#-------------------------------------------------------------------
  DECLARE rtn_value                     text          DEFAULT '';
  DECLARE w_seed_char_length            int           DEFAULT 0;
  DECLARE w_now_charactor               text          DEFAULT '';

--#-------------------------------------------------------------------
--# 出力パラメタの初期化、および変数の初期化
--#-------------------------------------------------------------------
  SELECT
  -- 以下、設定値の列挙
      ''
    , CHAR_LENGTH(p_seed_char)
  INTO
  -- 以下、設定先変数の列挙
      rtn_value
    , w_seed_char_length
  ;
--#-------------------------------------------------------------------
--# ランダム文字列の生成
--#-------------------------------------------------------------------
  IF p_key_length > 0 AND w_seed_char_length > 0 THEN
    WHILE p_key_length > CHAR_LENGTH(rtn_value) DO
      SELECT
      -- 以下、設定値の列挙
          SUBSTRING(
              p_seed_char
            , FLOOR(1 + (RAND() * w_seed_char_length))
            , 1
            )
      INTO
      -- 以下、設定先変数の列挙
          w_now_charactor
      ;
      SET rtn_value = CONCAT(rtn_value,w_now_charactor);
    END WHILE;
  END IF;

  RETURN rtn_value;
END//
DELIMITER ;

 - MySQL

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  関連記事

mysql
Windows7でMySQL Connectorのインストールに失敗する – Error installing ODBC driver MySQL ODBC 5.5 Driver

Error installing ODBC driver MySQL ODBC …

mysql
mysqlコマンドをコメント付きでクエリを実行する。

phpMyAdminでストアドを登録するとスクリプト内部にあるコメントも、ソース …

mysql
[MySQL]コマンドでのSQL文入力の途中キャンセル

mysqlをコマンドラインで操作している際、特に複数行、SQL文を入力してて途中 …

mysql
[MySQL]LOAD DATA INFILEで正常にCSVデータを読み込めない

※winscpを使って開発している人だけ、ご覧下さい。 LOAD DATA IN …

mysql
[MySQL][phpMyAdmin]Allowed memory size of XXXXXX bytes exhausted (tried to allocate XXXXXX bytes)

こんな現象がおきました phpMyAdminでデータベース全体をエクスポートした …

mysql
[MySQL]SELECT文で、FROM句を使用しないで、WHERE句を使用する

『SELECT文で、FROM句を使用しないで、WHERE句を使用する』 といった …

mysql
MySQL用シーケンス制御ファンクション集(PostgreSQL風にファンクションを揃えてみた)

MySQLには、PostgreSQLのようなシーケンスが機能的にないので、作って …

mysql
MySQL 権限一覧

権限 意味 ALL [PRIVILEGES] GRANT OPTION 以外の全 …

mysql
MySQLのrootパスワードが分からなくなったら

rootのパスワードが分からなくなったとき、どうすることもできないと観念したら、 …

mysql
[MySQL]ストアドプロシージャをmysqldumpでダンプできない – user has insufficent privileges to SHOW CREATE PROCEDURE

データベースに対して、ALL PRIVILEGES権限を割り当てているユーザでm …