sql >> Databáze >  >> RDS >> Sqlserver

Jak převést řetězec na datum/čas na serveru SQL pomocí CAST()

V SQL Server můžete použít CAST() funkce pro převod výrazu jednoho datového typu na jiný. Tato funkce funguje téměř stejně jako CONVERT() funkce, kromě toho, že syntaxe je mírně odlišná (a CAST() nepřijímá style argument).

Pokud tedy potřebujete převést řetězec na hodnotu data/času, můžete použít CONVERT() nebo CAST() funkce.

A pokud se při používání těchto dvou funkcí zobrazí chyba, PARSE() funkce může být právě to, co potřebujete.

Tento článek obsahuje příklady pomocí CAST() funkce.

Syntaxe

Syntaxe vypadá takto:

CAST ( expression AS data_type [ ( length ) ] )

Tyto argumenty jsou definovány takto:

expression
Jakýkoli platný výraz.
data_type
Cílový datový typ. To zahrnuje xmlvelkýsql_variant . Datové typy aliasů nelze použít.
length
Volitelné celé číslo, které určuje délku cílového datového typu. Výchozí hodnota je 30 .

Příklad 1 – Převést na datový typ dat

V tomto příkladu převedeme řetězec na datum datový typ (určíme jej pomocí date jako druhý argument).

SELECT CAST('20 Dec 2018' AS date) AS Result;

Výsledek:

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Stejně jako u CONVERT() řetězec musí být ve stylu, který lze převést na zadaný datový typ, jinak se zobrazí chyba:

SELECT CAST('Homer' AS date) AS Result;

Výsledek:

Conversion failed when converting date and/or time from character string.

Příklad 2 – Převod na datový typ datetime

V tomto příkladu převedeme na datetime datový typ:

SELECT CAST('20 Dec 2018' AS datetime) AS Result;

Výsledek:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

Můžete také zadat čas spolu s datem:

SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

Výsledek:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

Příklad 3 – Převod na datový typ datetime2

Zde převedeme na datetime2 datový typ:

SELECT CAST('20 Dec 2018' AS datetime2) AS Result;

Výsledek:

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

Příklad 4 – Převod na datový typ datetimeoffset

V tomto příkladu převedeme na datetimeoffset datový typ:

SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;

Výsledek:

+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

Příklad 5 – Převod na datový typ smalldatetime

Zde převedeme na smalldatetime datový typ:

SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;

Výsledek:

+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

Příklad 6 – Převod na časový typ dat

V tomto příkladu převedeme na čas datový typ:

SELECT CAST('20 Dec 2018' AS time) AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

V takovém případě jsme zadali datum, ale ne čas, takže se to vrátilo jako 00:00:00 . Zde je další příklad, kdy skutečně zadáváme čas:

SELECT CAST('2pm' AS time) AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Pokud však přidáme datum, dostaneme chybu (na rozdíl od předchozího příkladu, kdy jsme převedli na datetime ):

SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;

Výsledek:

Conversion failed when converting date and/or time from character string.

V tomto případě byste tedy museli převést na datetime nebo smalldatetime .

Příklad 7 – Vynechání data

Pokud při převodu na datum a čas vynecháte datum nebo smalldatetime datové typy, vrátí 1900-01-01 jako datum:

SELECT CAST('2pm' AS datetime) AS Result;

Výsledek:

+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

Pokud dáváte přednost použití CONVERT() funkce, viz tyto řetězce k datu/času CONVERT() příklady používající stejné příklady jako výše.

Jak již bylo zmíněno, pokud se při pokusu o převod řetězce na datum zobrazí chyba, vyzkoušejte PARSE() místo toho funkci. Bude fungovat v některých případech, kdy CAST() ne.


  1. Pomocí NEWSEQUENTIALID() vytvořte na serveru SQL Server zvyšující se identifikátor GUID

  2. Dotazujte se pouze na první data z tabulky

  3. Existuje způsob, jak získat číslo řádku v Mysql jako rownum v oracle

  4. Jak používat MySQL s Deno a Oak