V SQL Server můžete použít CONVERT()
funkce pro převod výrazu jednoho datového typu na jiný. Pokud tedy potřebujete převést řetězec do formátu data/času, tato funkce vám může pomoci.
Tento článek obsahuje příklady, které demonstrují jeho použití.
Syntaxe
Syntaxe vypadá takto:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Tyto argumenty jsou definovány takto:
expression
- Jakýkoli platný výraz.
data_type
- Cílový datový typ. To zahrnuje xml , velký a 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
. style
- Celočíselný výraz, který určuje způsob
CONVERT()
funkce přeloží výraz . Pro hodnotu stylu NULL je vrácena hodnota NULL. data_type určuje rozsah.
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 první argument).
SELECT CONVERT(date, '20 Dec 2018') AS Result;
Výsledek:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
Řetězec samozřejmě musí být ve stylu, který lze převést na zadaný datový typ, jinak se zobrazí chyba:
SELECT CONVERT(date, 'Homer') 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 CONVERT(datetime, '20 Dec 2018') AS Result;
Výsledek:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 00:00:00.000 | +-------------------------+
Můžete také určit čas:
SELECT CONVERT(datetime, '2pm 20 Dec 2018') AS Result;
Výsledek:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 14:00:00.000 | +-------------------------+
Příklad 3 – Převod na datový typ datetime2
V tomto příkladu převedeme na datetime2 datový typ:
SELECT CONVERT(datetime2, '20 Dec 2018') 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 CONVERT(datetimeoffset, '20 Dec 2018') AS Result;
Výsledek:
+------------------------------------+ | Result | |------------------------------------| | 2018-12-20 00:00:00.0000000 +00:00 | +------------------------------------+
Příklad 5 – Převod na datový typ smalldatetime
V tomto příkladu převedeme na smalldatetime datový typ:
SELECT CONVERT(smalldatetime, '20 Dec 2018') 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 CONVERT(time, '20 Dec 2018') 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 CONVERT(time, '2pm') 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 CONVERT(time, '2pm 20 Dec 2018') 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 CONVERT(datetime, '2pm') AS Result;
Výsledek:
+-------------------------+ | Result | |-------------------------| | 1900-01-01 14:00:00.000 | +-------------------------+
Pokud se při pokusu o převod řetězce na datum zobrazí chyba, zkuste PARSE()
místo toho funkci. Bude fungovat v některých případech, kdy CONVERT()
ne.
Můžete se také podívat na CAST()
funkce, což je standardní způsob převodu mezi datovými typy ANSI SQL. Zde je návod, jak převést řetězec na datum/čas pomocí CAST()
.