Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


第 12 章 関数と演算子

目次

12.1 関数と演算子のリファレンス
12.2 式評価での型変換
12.3 演算子     [+/-]
12.4 制御フロー関数
12.5 文字列関数     [+/-]
12.6 数値関数と演算子     [+/-]
12.7 日付および時間関数
12.8 MySQL で使用されるカレンダー
12.9 全文検索関数     [+/-]
12.10 キャスト関数と演算子
12.11 XML 関数
12.12 ビット関数
12.13 暗号化関数と圧縮関数
12.14 情報関数
12.15 空間分析関数     [+/-]
12.16 グローバルトランザクション ID とともに使用される関数
12.17 MySQL Enterprise Encryption の関数     [+/-]
12.18 その他の関数
12.19 GROUP BY 句で使用される関数と修飾子     [+/-]
12.20 高精度計算     [+/-]

SQL ステートメントのいくつかのポイント (SELECT ステートメントの ORDER BY または HAVING 句、SELECTDELETE、または UPDATE ステートメントの WHERE 句、SET ステートメントなど) では、式を使用できます。式は、リテラル値、カラム値、NULL、組み込み関数、ストアドファンクション、ユーザー定義関数、および演算子を使用して作成できます。この章では、MySQL で式を記述する際に許可されている関数および演算子について説明します。ストアドファンクションおよびユーザー定義関数を作成する手順については、セクション20.2「ストアドルーチン (プロシージャーと関数) の使用」およびセクション24.3「MySQL への新しい関数の追加」で説明されています。各種の関数への参照をサーバーが解釈する方法を記述したルールについては、セクション9.2.4「関数名の構文解析と解決」を参照してください。

NULL を含む式では、その関数または演算子に関するドキュメントで明記されていないかぎり、常に NULL 値が生成されます。

注記

デフォルトでは、関数名とそれに続く丸括弧の間には空白を入れることはできません。これは、MySQL パーサーが、関数呼び出しと、偶然に関数と同じ名前を持つテーブルまたはカラムへの参照を区別するのに役立ちます。ただし、関数の引数の前後にスペースを入れることは許可されています。

最初に --sql-mode=IGNORE_SPACE オプションを付けると、関数名のあとの空白文字を受け入れるように MySQL サーバーに指示できます。(セクション5.1.7「サーバー SQL モード」を参照してください。)各クライアントプログラムで mysql_real_connect()CLIENT_IGNORE_SPACE オプションを使用すると、この動作をリクエストできます。どちらの場合でも、すべての関数名は予約語になります。

簡略化のため、この章で示すほとんどの例では、mysql プログラムからの出力が省略形で表示されています。例は次の書式で表示されません。

mysql> SELECT MOD(29,9);
+-----------+
| mod(29,9) |
+-----------+
|         2 |
+-----------+
1 rows in set (0.00 sec)

代わりに、次の書式が使用されます。

mysql> SELECT MOD(29,9);
        -> 2

User Comments
  Posted by Adrian Corston on December 5, 2005
In the absence of a "delta" function to find the change in value for a column from one row to the next, I found this solution using a mysql variable:

mysql> create temporary table t (idx int, val int);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t values(1, 100), (2, 120), (3, 95), (4, 200);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> set @v = 0; select val - @v delta, @v := val val from t order by idx;
Query OK, 0 rows affected (0.00 sec)

+-------+------+
| delta | val |
+-------+------+
| 100 | 100 |
| 20 | 120 |
| -25 | 95 |
| 105 | 200 |
+-------+------+
4 rows in set (0.00 sec)

Don't swap the argument order on the select - the assignment must come last. And don't forget to prime your variable before the select or it won't have the right type (ie. numeric in this case.)

This is particularly useful with unix timestamps to work out the elapsed seconds between records.
  Posted by Nithiya nandam on July 3, 2006
You can extract multiple column values in a single column

eg:

SELECT IF(First_name LIKE '%mathew%',First_name,Last_name) FROM user_tbl

It will work perfectly and allows us to choose a dynamic column.

Bye Bye
Sign Up Login You must be logged in to post a comment.