V SQL Server, CONVERT()
funkce převede výraz jednoho datového typu na jiný.
Zde je rychlý přehled funkce s příklady.
Syntaxe
Syntaxe vypadá takto:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Kde expression
je výraz, který se má převést, data_type
je nový datový typ a length
je volitelná délka pro nový datový typ.
Volitelný style
argument lze použít k určení, jak má funkce přeložit expression
argument. Tento argument můžete například použít k určení formátu data.
Příklad
Zde je příklad převodu řetězce na desítkové:
SELECT CONVERT(DECIMAL(5,2), '007');
Výsledek:
7.00
Řetězec k datu
Zde je příklad seslání řetězce na datum:
SELECT CONVERT(date, '09 Feb 2030');
Výsledek:
2030-02-09
V tomto případě CONVERT()
funkce byla schopna určit, které části data jsou které, protože jsem poskytl datum ve formátu, který rozpoznává.
Předání hodnoty, kterou nelze přetypovat jako datum, způsobí chybu:
SELECT CONVERT(date, 'My Birthday');
Výsledek:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Místní prostředí
Jazyk aktuální relace může ovlivnit způsob interpretace dat.
Při použití britského jazyka se stane toto:
SET LANGUAGE British;
SELECT CONVERT(date, '09/02/2030');
Výsledek:
2030-02-09
V tomto případě bylo datum interpretováno jako devátý únorový den.
Změňme jazyk na us_English
:
SET LANGUAGE us_English;
SELECT CONVERT(date, '09/02/2030');
Výsledek:
2030-09-02
Tentokrát to datum interpretovalo jako druhý den září.
style
Argument
Můžeme použít volitelný style
argument k určení, jak má být výraz přeložen.
Příklad:
SET LANGUAGE British;
SELECT
CONVERT(date, '09/02/2030') AS "British",
CONVERT(date, '09/02/2030', 101) AS "US",
CONVERT(date, '09/02/30', 1) AS "US (short)",
CONVERT(date, '20300902', 112) AS "ISO",
CONVERT(date, '09.02.2030', 104) AS "German";
Výsledek:
+------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Zřetězení řetězců
Zde je příklad přetypování číselné hodnoty do řetězce za účelem zřetězení hodnoty s řetězcem:
SELECT 'Age: ' + CONVERT(varchar(10), 27);
Výsledek:
Age: 27
Pokud jej nejprve nepřevedeme, stane se toto:
SELECT 'Age: ' + 27;
Výsledek:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Age: ' to data type int.
Při pokusu o zřetězení dvou hodnot s různými datovými typy musí SQL Server implicitně převést jednu z hodnot, aby používala datový typ druhé, aby byly obě stejného datového typu, než může provést zřetězení. Při provádění této konverze se řídí pravidly priority datových typů.
V SQL Server, int
datový typ má vyšší prioritu než varchar
.
Proto se ve výše uvedeném příkladu SQL Server pokouší převést řetězec na celé číslo, ale to se nezdaří, protože řetězec nelze převést na celé číslo.
Zkrácení textu
Jeden šikovný malý trik, který můžeme provést pomocí CONVERT()
funkcí je zkrátit delší řetězce na čitelnější délku.
Zde je příklad zkrácení textu vybraného z databázové tabulky:
SELECT
ProductName,
CONVERT(varchar(20), ProductName) AS Truncated
FROM Products;
Výsledek:
+---------------------------------+----------------------+ | ProductName | Truncated | |---------------------------------+----------------------| | Left handed screwdriver | Left handed screwdri | | Long Weight (blue) | Long Weight (blue) | | Long Weight (green) | Long Weight (green) | | Sledge Hammer | Sledge Hammer | | Chainsaw | Chainsaw | | Straw Dog Box | Straw Dog Box | | Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu | | Right handed screwdriver | Right handed screwdr | +---------------------------------+----------------------+
Další informace
CONVERT()
funkce funguje podobným způsobem jako CAST()
a pomocí kterékoli z nich lze provést mnoho převodů dat. To znamená, že mezi nimi existují rozdíly.
Viz dokumentaci společnosti Microsoft pro CAST()
a CONVERT()
pro podrobnější informace o používání této funkce.