sql >> データベース >  >> RDS >> MariaDB

MariaDBでのCAST()のしくみ

    MariaDBでは、CAST() 値を別のデータ型に変換する組み込み関数です。 1つのタイプの値を取り、指定されたタイプの値を返します。

    関数を呼び出すときに引数として値と、変換する型を指定します。

    CAST() CONVERT()と同様に機能します 。

    構文

    構文は次のようになります:

    CAST(expr AS type)

    expr 変換する値であり、type 変換するデータ型です。

    簡単な例を次に示します。

    SELECT CAST(123.45 AS INT);

    結果:

    +---------------------+
    | CAST(123.45 AS INT) |
    +---------------------+
    |                 123 |
    +---------------------+

    これにより値が整数にキャストされたため、小数点以下の桁数が削除されました。

    別の例を次に示します。

    SELECT CAST('2020-01-01' AS DATETIME);

    結果:

    +--------------------------------+
    | CAST('2020-01-01' AS DATETIME) |
    +--------------------------------+
    | 2020-01-01 00:00:00            |
    +--------------------------------+

    この場合、文字列をDATETIMEに変換しました データ型。

    変換の失敗

    前の例では、有効なDATEを指定しました 文字列(またはDATE リテラル)。したがって、MariaDBは値をDATETIMEに変換することができました データ型。

    ただし、無効なDATEを指定するとどうなりますか。 文字列:

    SELECT CAST('1 Jan, 2020' AS DATE);

    結果:

    +-----------------------------+
    | CAST('1 Jan, 2020' AS DATE) |
    +-----------------------------+
    | NULL                        |
    +-----------------------------+

    ここで、MariaDBはこの値を変換する方法を理解できず、NULLを返したようです。 。

    この場合、STR_TO_DATE()などの別の関数を使用できます。 このような変換を実行するには:

    SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');

    結果:

    +-----------------------------------------+
    | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') |
    +-----------------------------------------+
    | 2020-01-01                              |
    +-----------------------------------------+

    文字セットを指定する

    CAST()を使用する場合、戻り値に使用する文字セットを指定できます。 働き。

    例:

    SELECT 
        COLLATION(123) AS "123",
        COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
        COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
        COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";

    結果:

    +--------+------------------+-------------------+-----------------+
    | 123    | utf16            | latin1            | big5            |
    +--------+------------------+-------------------+-----------------+
    | binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |
    +--------+------------------+-------------------+-----------------+

    ここでは、COLLATION()を使用しました 新しいデータ型にキャストされた後、各値の照合を返す関数。各値は、指定された文字セットのデフォルトの照合を使用します。

    初期値は文字列ではないため、COLLATION() バイナリを返します。

    CHARへの変換 文字セットを指定しないと、collation_connectionになります 使用されている文字セットの照合。

    照合を指定する

    照合を指定することもできます。

    例:

    SELECT 
        COLLATION(123) AS "123",
        COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
        COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
        COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

    結果:

    +--------+--------------------+-------------------+-----------------------+
    | 123    | utf16              | latin1            | big5                  |
    +--------+--------------------+-------------------+-----------------------+
    | binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |
    +--------+--------------------+-------------------+-----------------------+

    この場合、指定した文字セットのデフォルトの照合ではない使用する照合を明示的に指定しました(ただし、文字セットの有効な照合は引き続き有効です)。

    文字セットに対して無効な照合を指定すると、エラーが発生します。

    最初の2つの照合を切り替えると、次のようになります。

    SELECT 
        COLLATION(123) AS "123",
        COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
        COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
        COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

    結果:

    ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'

    latin1_german2_ciが原因で、最初のものに到達してエラーがスローされました。 utf16の有効な照合ではありません 文字セット。

    照合とそれに対応する文字セットの完全なリストについては、MariaDBで利用可能な照合のリストを参照してください。

    ヌル引数

    nullを変換しようとしています nullを返します :

    SELECT CAST(null AS DATETIME);

    結果:

    +------------------------+
    | CAST(null AS DATETIME) |
    +------------------------+
    | NULL                   |
    +------------------------+

    ただし、nullを渡す 新しいデータ型を指定しないと、エラーが発生します:

    SELECT CAST(null);

    結果:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

    引数がありません

    CAST()を呼び出す 引数を渡さないとエラーが発生します:

    SELECT CAST();

    結果:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

    1. スプリットブレイン症候群からGaleraクラスターまたはMySQLレプリケーションを回復する方法

    2. SQLServerデータをSalesforce.comに挿入する

    3. OracleのLOCALTIMESTAMP()関数

    4. プロバイダーは、Oracleクライアントのバージョンと互換性がありません