MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak CAST() działa w MariaDB

W MariaDB, CAST() to wbudowana funkcja, która konwertuje wartość na inny typ danych. Pobiera wartość jednego typu i zwraca wartość określonego typu.

Podajesz wartość jako argument podczas wywoływania funkcji, a także typ, na który chcesz ją przekonwertować.

CAST() działa podobnie do CONVERT() .

Składnia

Składnia wygląda tak:

CAST(expr AS type)

Gdzie expr jest wartością do konwersji, a type to typ danych, na który chcesz go przekonwertować.

Przykład

Oto prosty przykład:

SELECT CAST(123.45 AS INT);

Wynik:

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

Spowodowało to przekształcenie wartości w liczbę całkowitą, a zatem miejsca po przecinku zostały usunięte.

Oto kolejny przykład:

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

Wynik:

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

W tym przypadku przekonwertowaliśmy ciąg na DATETIME typ danych.

Niepowodzenie konwersji

W poprzednim przykładzie podaliśmy prawidłową DATE ciąg (lub DATE dosłowny). Dlatego MariaDB była w stanie przekonwertować wartość na DATETIME typ danych.

Oto jednak, co się dzieje, gdy podamy nieprawidłową DATE ciąg:

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

Wynik:

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

Tutaj MariaDB najwyraźniej nie mogła dowiedzieć się, jak przekonwertować tę wartość i zwróciła NULL .

W tym przypadku moglibyśmy użyć innej funkcji, takiej jak STR_TO_DATE() aby wykonać taką konwersję:

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

Wynik:

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

Określ zestaw znaków

Możliwe jest określenie zestawu znaków, który będzie używany jako wartość zwracana podczas korzystania z CAST() funkcjonować.

Przykład:

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

Wynik:

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

Tutaj użyliśmy COLLATION() funkcja zwracająca sortowanie każdej wartości po jej rzutowaniu na nowy typ danych. Każda wartość używa domyślnego sortowania dla określonego zestawu znaków.

Wartość początkowa nie jest ciągiem, więc COLLATION() zwraca binarny.

Konwersja do CHAR bez określenia zestawu znaków spowoduje to collation_connection używane sortowanie zestawu znaków.

Określ sortowanie

Możliwe jest również określenie sortowania.

Przykład:

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

Wynik:

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

W tym przypadku jawnie określiliśmy sortowanie do użycia, które nie jest sortowaniem domyślnym dla określonego zestawu znaków (chociaż nadal jest poprawnym sortowaniem dla zestawu znaków).

Określenie sortowania, które nie jest prawidłowe dla zestawu znaków, powoduje błąd.

Oto, co się dzieje, gdy zamieniam pierwsze dwie sortowania:

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

Wynik:

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

Dotarł do pierwszego i wyrzucił błąd, ponieważ latin1_german2_ci nie jest poprawnym sortowaniem dla utf16 zestaw znaków.

Zobacz tę listę sortowań dostępnych w MariaDB, aby uzyskać pełną listę sortowań i pasujących do nich zestawów znaków.

Argumenty zerowe

Próbuję przekonwertować null zwraca null :

SELECT CAST(null AS DATETIME);

Wynik:

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

Jednak przekazanie null bez określenia nowego typu danych powoduje błąd:

SELECT CAST(null);

Wynik:

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

Brakujący argument

Wywołanie CAST() bez przekazania argumentu powoduje błąd:

SELECT CAST();

Wynik:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak CURDATE() działa w MariaDB

  2. Jak połączyć się z AWS MySQL / MariaDB RDS lub EC2 Database z MySQL WorkBench?

  3. Jak działa LOG2() w MariaDB

  4. Jak działa UNCOMPRESSED_LENGTH() w MariaDB

  5. Wskazówki i porady dotyczące rejestrowania audytu dla MariaDB