無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.8 キャスト関数と演算子
« 11.7.5 微調整 MySQL 全文検索

11.9 XML 関数 »
Section Navigation      [Toggle]
  • 11 関数と演算子
  • 11.1 演算子
  • 11.2 制御フロー関数
  • 11.3 文字列関数
  • 11.4 数字関数
  • 11.5 日付時刻関数
  • 11.6 MySQL が使用するカレンダーは ?
  • 11.7 全文検索関数
  • 11.8 キャスト関数と演算子
  • 11.9 XML 関数
  • 11.10 その他の関数
  • 11.11 GROUP BY 句との関数および修飾子の使用

11.8. キャスト関数と演算子

  • BINARY

    BINARY 演算子はそれに続いて、バイナリ ストリングにストリングをキャストします。これはカラムの比較を強制的に、文字ごとでなくバイトごとに行わせる簡易な方法です。カラムが BINARY または BLOB と定義されていない場合でも、大文字小文字を区別した比較になります。BINARY もまた、後続のスペースを重要なものにします。

    mysql> SELECT 'a' = 'A';
            -> 1
    mysql> SELECT BINARY 'a' = 'A';
            -> 0
    mysql> SELECT 'a' = 'a ';
            -> 1
    mysql> SELECT BINARY 'a' = 'a ';
            -> 0
    

    比較において、BINARY は演算全体に影響を与えます。同じ結果を持つどちらのオペランドの前にでも、与えることができます。

    BINARY str は、CAST(str AS BINARY) の省略表記です。

    コンテキストのあるものでは、インデックス付きのカラムを BINARY にキャストした場合、MySQL はそのインデックスを有効に使うことができません。

  • CAST(expr AS type), CONVERT(expr,type), CONVERT(expr USING transcoding_name)

    CAST() および CONVERT() 関数はひとつのタイプの値をもって、他のタイプの値を生成します。

    その type は次の値のどれかになりえます :

    • BINARY[(N)]

    • CHAR[(N)]

    • DATE

    • DATETIME

    • DECIMAL

    • SIGNED [INTEGER]

    • TIME

    • UNSIGNED [INTEGER]

    BINARY は、BINARY データ タイプを持つストリングを生成します。これが比較に及ぼす影響については 項10.4.2. 「BINARY と VARBINARY タイプ」 をご覧ください。任意の長さ N が与えられた場合、BINARY(N) は、キャストが N バイト以下の引数を使用する原因となります。N バイトより短い値は、0x00 バイトで N の長さまでパッドされます。

    CHAR(N) 句は、キャストが N 文字以下の引数を使用する原因になります。

    CAST() および CONVERT(... USING ...) は標準の SQL シンタックスです。CONVERT() の非 USING フォームは ODBC シンタックスです。

    USING を持つ CONVERT() は、異なる文字セット間のデータを変換するのに使用されます。MySQL では、符号化名は対応文字セット名と同じものです。例えば、このステートメントは、デフォルトの文字セットのストリング 'abc' を、utf8 文字セットの対応ストリングに変換します。

    SELECT CONVERT('abc' USING utf8);
    

バイナリ ストリングは文字セットを持たないため、通常は BLOB 値、またはバイナリ ストリングを、大文字小文字の区別のない方法で比較はできず、従って大文字小文字という概念はありません。大文字小文字を区別しない比較を行うには、CONVERT() 関数を使用して、値を非バイナリ ストリングに変換します。結果の文字セットが大文字小文字を区別しない照合を得た場合、LIKE 演算は大文字小文字の区別をしません :

SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;

異なる文字セットを使用するには、先行するステートメントで、その名前を latin1 の代わりにします。大文字小文字の区別のない照合を確実に使用するには、CONVERT() 呼び出しの後に COLLATE 句を特定します。

CONVERT() を、異なる文字セットで示されているストリングの比較に、より一般的に使用することができます。

キャスト関数は、CREATE ... SELECT 文で、特定のタイプのカラム作成したい場合に役立ちます :

CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);

この関数はまた、ENUM カラムを語彙順にソートしたい場合にも利用できます。通常は、ENUM カラムのソートは内部数値を使用して行います。値を CHAR にキャストすると、結果は語彙順になります :

SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);

CAST(str AS BINARY) は BINARY str と同じものです。CAST(expr AS CHAR) は式を、デフォルトの文字セットを持つストリングとして扱います。

CONCAT('Date: ',CAST(NOW() AS DATE)) のようなより複雑な式の一部として使用する場合、CAST() もまた結果を変えます。

データを異なるフォーマットに抽出するには、CAST() ではなく、LEFT() または EXTRACT() のようなストリング関数を使用します。詳細は 項11.5. 「日付時刻関数」 を参照してください。

ストリングを数値コンテキストの数値にキャストするには、通常はストリング値を数字のように使用するだけで済みます。

mysql> SELECT 1+'1';
       -> 2

ストリング コンテキストで数字を使用する場合、その数字は自動的に BINARY ストリングに変換されます。

mysql> SELECT CONCAT('hello you ',2);
        -> 'hello you 2'

MySQL は、符号付きでも、符号無しでも、64 バイト値での演算をサポートします。算術演算子 ( + または - など ) を使用しており、演算のひとつは符号のない整数である場合、結果は符合なしになります。SIGNED および UNSIGNED キャスト演算子を使用して、演算を符号付き、もしくは符号なしの 64 ビットの整数にキャストすることで、これをそれぞれオーバーライドすることができます。

mysql> SELECT CAST(1-2 AS UNSIGNED)
        -> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
        -> -1

オペランドのどちらかが浮動小数点値で有る場合、結果は浮動小数点値になり、前のルールには影響を受けません。( このコンテキストでは、DECIMAL カラム値は浮動小数点値とみなされます。)

mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
        -> -1.0

算術演算でストリングを使用している場合、これは浮動小数点数に変換されます。

「zero」 日付ストリングを日付に変換する場合、CONVERT() と CAST() は NULL を戻し、NO_ZERO_DATE SQL モードが有効になれば警告を発行します。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.