カテゴリー
SugiBlog Webデザイナー・プログラマーのためのお役立ちTips

MySQLで10進数を2・8・16進数に変換

MySQLで基数変換を行う方法をご紹介します。

2進数に変換

SELECT BIN(500);

出力結果は111110100となります。

8進数に変換

SELECT OCT(500);

出力結果は764となります。

16進数に変換

SELECT HEX(500);

出力結果は1f4となります。

CONV関数

又、CONV関数を使っても変換することが可能です。
先ほどとは逆に2進数から10進数に変換する場合等もこちらを使用します。

書式:CONV(値, 変換元の基数, 変換先の基数)

例)500を10進数から2進数に変換

SELECT CONV(500, 10, 2);

公式リファレンス
BIN関数:https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_bin
OCT関数:https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_oct
HEX関数:https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_hex
CONV関数:https://dev.mysql.com/doc/refman/5.6/ja/mathematical-functions.html#function_conv

648 views

MySQL IN句とFIND_IN_SET関数

MySQLの抽出条件の指定方法としてIN句とFIND_IN_SET関数というものがあります。
その具体的な使用方法をご紹介します。

サンプルとしてテーブル「sample」を用意します。

mysql> select * from `sample`;
+----+--------+------+
| id | name   | type |
+----+--------+------+
| 1  | 赤井   | 1    |
| 2  | 井田   | 2    |
| 3  | 宇野   | 3    |
| 4  | 江崎   | 1    |
| 5  | 奥本   | 2    |
+----+--------+------+

IN句

例えば、idが1・2・4のデータを取得したいとき、
IN句を使うとこのように抽出することができます。

SELECT * FROM sample WHERE id IN (1, 2, 4);

結果は以下のようになります。

+----+--------+------+
| id | name   | type |
+----+--------+------+
| 1  | 赤井   | 1    |
| 2  | 井田   | 2    |
| 4  | 江崎   | 1    |
+----+--------+------+

FIND_IN_SET関数

IN句のときと同様にidが1・2・4のデータを取得してみましょう。

SELECT * FROM sample WHERE FIND_IN_SET(id, '1,2,4');

こちらも結果はIN句を使ったときと同じ結果になります。

続きを読む…»

1,988 views

MySQLの日付関数 22選

MySQLで使用できる日付の加算や減算等の関数をご紹介します。

現在の日付を返す CURDATE()

現在の日付を返します。
CURRENT_DATE(), CURRENT_DATEはCURDATE()のシノニムです。

mysql> SELECT CURDATE();
        -> '2008-06-13'
mysql> SELECT CURDATE() + 0;
        -> 20080613

日付部分を抽出する DATE()

書式:DATE(expr)
日付exprの日付部分を抽出します。

mysql> SELECT DATE('2003-12-31 01:02:03');
        -> '2003-12-31'

日付の加算 DATE_ADD()

書式:DATE_ADD(date, INTERVAL expr unit)
日付値に時間値 (間隔) を加算します。
ADDDATE()DATE_ADD()のシノニムです。

unit…YEAR,MONTH,DAY等

mysql> SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);
        -> '2008-02-02'
mysql> SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);
        -> '2008-02-02'

日付を指定された書式に設定 DATE_FORMAT()

書式:DATE_FORMAT(date, format)
日付を指定された書式に設定します。

mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
        -> '4th 00 Thu 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
        -> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
        -> '1998 52'
mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
        -> '00'

日付の減算 DATE_SUB()

書式:DATE_SUB(date, INTERVAL expr unit)
日付から時間値 (間隔) を引きます。
SUBDATE()DATE_SUB()のシノニムです。

mysql> SELECT DATE_SUB('2005-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND);
        -> '2004-12-30 22:58:59'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'

続きを読む…»

760 views

MySQL カラムの値をSELECT…INTO構文で変数に格納する

SELECT...INTO構文を使用すると、クエリー結果を変数に格納することができます。
ストアドファンクションで利用する機会があったのでご紹介します。

構文例

SELECT field_name INTO @param FROM table limit 1;

最後にlimit 1と付けているのは、この構文を使うときはレコード数が1件でないといけないからです。
もし1件以上のデータが合致してしまった場合はエラーが発生し、以下のようなメッセージが返されます。

ERROR 1172 (42000): Result consisted of more than one row

SELECT...INTOが成功した後に以下を実行すると、設定した変数の内容を確認することができます。

SELECT @param;

こちらは公式リファレンスマニュアルにも掲載されている方法です。
https://dev.mysql.com/doc/refman/5.6/ja/select-into.html

1,098 views

MySQL 今日の日付を取得する

MySQLで今日の日付を利用したいとき、取得する方法が何通りかあります。

SELECT CURDATE();

もしくは

SELECT DATE(NOW());

その他、CURRENT_DATECURRENT_DATE()でも同様に今日の日付が取得できます。

上記すべて、結果は次のようになります。

2022-09-12

また、YYYYMMDDというハイフンなしの形式が良い場合はCURDATE()+0とすることで数値の扱いとなり20220912と表示されます。

1,201 views