sql >> Databáze >  >> RDS >> MariaDB

Jak CAST() funguje v MariaDB

V MariaDB, CAST() je vestavěná funkce, která převádí hodnotu na jiný datový typ. Přebírá hodnotu jednoho typu a vrací hodnotu zadaného typu.

Hodnotu zadáte jako argument při volání funkce a také typ, na který ji chcete převést.

CAST() funguje podobně jako CONVERT() .

Syntaxe

Syntaxe vypadá takto:

CAST(expr AS type) 

Kde expr je hodnota, která se má převést, a type je datový typ, na který jej chcete převést.

Příklad

Zde je jednoduchý příklad:

SELECT CAST(123.45 AS INT); 

Výsledek:

+---------------------+| CAST(123,45 AS INT) |+---------------------+| 123 |+---------------------+

Toto přetypovalo hodnotu na celé číslo, a proto byla odstraněna desetinná místa.

Zde je další příklad:

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

Výsledek:

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

V tomto případě jsme převedli řetězec na DATETIME datový typ.

Selhání konverze

V předchozím příkladu jsme poskytli platné DATE řetězec (nebo DATE doslovný). MariaDB tedy dokázala převést hodnotu na DATETIME datový typ.

Co se však stane, když poskytneme neplatné DATE řetězec:

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

Výsledek:

+-----------------------------+| CAST('1. ledna 2020' JAKO DATUM) |+-----------------------------+| NULL |+-----------------------------+

Zde MariaDB zjevně nedokázala zjistit, jak tuto hodnotu převést, a vrátila NULL .

V tomto případě bychom mohli použít jinou funkci, například STR_TO_DATE() k provedení takové konverze:

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

Výsledek:

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

Určení znakové sady

Při použití CAST() je možné určit znakovou sadu, která se má použít pro návratovou hodnotu funkce.

Příklad:

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"; 

Výsledek:

+--------+------------------+------------------ -+------------------+| 123 | utf16 | latina1 | big5 |+--------+------------------+-------------------- +------------------+| binární | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |+--------+------------------+-------------------- +-----------------+

Zde jsme použili COLLATION() funkce, která vrátí řazení každé hodnoty poté, co byla přetypována na nový datový typ. Každá hodnota používá výchozí řazení pro zadanou znakovou sadu.

Počáteční hodnota není řetězec, a proto COLLATION() vrátí binární.

Převádí se na CHAR bez zadání znakové sady bude výsledkem collation_connection se používá řazení znakové sady.

Zadejte řazení

Je také možné určit řazení.

Příklad:

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"; 

Výsledek:

+--------+--------------------+---------------- ---+------------------------+| 123 | utf16 | latina1 | big5 |+--------+--------------------+------------------ --+------------------------+| binární | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |+--------+--------------------+----------------- --+-----------------------+

V tomto případě jsme explicitně určili řazení, které se má použít, které není výchozím řazením pro zadanou znakovou sadu (ačkoli je to stále platné řazení pro znakovou sadu).

Zadáním řazení, které není platné pro znakovou sadu, dojde k chybě.

Zde je to, co se stane, když změním první dvě kolace:

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"; 

Výsledek:

CHYBA 1253 (42000):COLLATION 'latin1_german2_ci' není platný pro CHARACTER SET 'utf16'

Dostalo se to na první a vyhodilo chybu, protože latin1_german2_ci není platné řazení pro utf16 znaková sada.

Podívejte se na tento seznam porovnávání dostupných v MariaDB, kde najdete úplný seznam porovnávání a jejich odpovídající znakové sady.

Nulové argumenty

Pokus o převod null vrátí null :

SELECT CAST(null AS DATETIME); 

Výsledek:

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

Nicméně předání null bez zadání nového datového typu dojde k chybě:

SELECT CAST(null); 

Výsledek:

ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi blízko ')' na řádku 1

Chybí argument

Volání CAST() bez předání argumentu dojde k chybě:

SELECT CAST(); 

Výsledek:

ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MariaDB, kde najdete správnou syntaxi blízko ')' na řádku 1

  1. Seskupování záznamů hodinu po hodině nebo den po dni a vyplnění mezer nulou nebo nulou

  2. Jak provést DELETE Pass-Through Query v SQL Server

  3. Jaká je maximální délka dat, která mohu vložit do sloupce BLOB v MySQL?

  4. Vrátit aktuální přihlašovací jméno na SQL Server (T-SQL)