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
[MySQL]テーブルのカラムのコメントの変更

MySQLでカラムのコメントを変更する方法を探してみた。 結局、カラムの再定義と …

mysql
[MySQL]Cannot load from mysql.proc. The table is probably corrupted

mysqlのストアドプロシージャの再登録をしようとすると、下記のエラーが表示され …

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

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

mysql
mysqlで一般クエリログをする

mysqlで一般クエリログをするためには、 my.cnfをいじるといいのだけど、 …

mysql
[MySQL]innodbチューニング

いま携わっているプロジェクトでMySQLを使用しているのだけど、主要テーブル全て …

mysql
[MySQL]よく使うコマンド一覧

自分用のメモです。

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

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

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

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

mysql
[MySQL]プロセスの確認と、プロセスの強制終了

ストプロ内でのどのSQLが実行されているかもプロセスを見れば分かる MySQL内 …

mysql
MySQL 権限一覧

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