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

MariaDBでのCONVERT()のしくみ

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

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

    CONVERT() CAST()に似ています 。

    構文

    CONVERT() 関数は、ODBC構文またはSQL92構文を使用して呼び出すことができます。

    ODBC構文:

    CONVERT(expr, type)

    SQL92構文:

    CONVERT(expr USING charset)

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

    SQL92構文を使用して、charset 変換したい文字セットです。

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

    SELECT CONVERT(123.45, INT);

    結果:

    +----------------------+
    | CONVERT(123.45, INT) |
    +----------------------+
    |                  123 |
    +----------------------+

    これにより、値が整数に変換され、小数点以下が削除されました。

    別の例を次に示します。

    SELECT CONVERT('2020-01-01', DATETIME);

    結果:

    +---------------------------------+
    | CONVERT('2020-01-01', DATETIME) |
    +---------------------------------+
    | 2020-01-01 00:00:00             |
    +---------------------------------+

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

    変換の失敗

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

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

    SELECT CONVERT('1 Jan, 2020', DATE);

    結果:

    +------------------------------+
    | CONVERT('1 Jan, 2020', 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                              |
    +-----------------------------------------+

    文字セットを指定する

    SQL92構文を使用すると、変換する文字セットを指定できます。

    例:

    SELECT CONVERT('ไม้เมือง' USING tis620);

    結果:

    +--------------------------------------------------+
    | CONVERT('ไม้เมือง' USING tis620)                   |
    +--------------------------------------------------+
    | ไม้เมือง                                           |
    +--------------------------------------------------+

    文字セットを変更すると、照合もその文字セットのデフォルトの照合に変更されます。

    上記の例は、文字セット/照合がどのように変更されたかを実際には示していません。

    幸い、CHARSET()などの関数を使用できます。 およびCOLLATION() 文字セットと照合がどのように変更されたかを確認するには:

    SELECT 
        CHARSET('ไม้เมือง') AS a,
        COLLATION('ไม้เมือง') AS b,
        CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
        COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;

    結果:

    +------+-----------------+--------+----------------+
    | a    | b               | c      | d              |
    +------+-----------------+--------+----------------+
    | utf8 | utf8_general_ci | tis620 | tis620_thai_ci |
    +------+-----------------+--------+----------------+

    1つ目は、接続に文字セットと照合を使用します。 2つ目は、CONVERT()で明示的に指定した文字セットを使用します 、およびその文字セットのデフォルトの照合。

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

    ヌル引数

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

    SELECT CONVERT(null, DATETIME);

    結果:

    +-------------------------+
    | CONVERT(null, DATETIME) |
    +-------------------------+
    | NULL                    |
    +-------------------------+

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

    SELECT CONVERT(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

    引数がありません

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

    SELECT CONVERT();

    結果:

    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. MySQL LOAD DATA INFILE with ON DUPLICATE KEY UPDATE

    2. AndroidでProguardとSQLcipherを使用しようとしているときにNoClassDefFoundErrorを取得する

    3. SQL Serverで一重引用符をエスケープするにはどうすればよいですか?

    4. Ubuntu16.04でのPostgreSQLデータベースの作成と削除