V SQL Server, CAST()
funkce převede výraz jednoho datového typu na jiný.
Zde je rychlý přehled funkce s příklady.
Syntaxe
Syntaxe vypadá takto:
CAST ( expression AS data_type [ ( length ) ] )
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.
Příklad
Zde je příklad přetypování řetězce jako desítkové:
SELECT CAST('007' AS DECIMAL(5,2));
Výsledek:
7.00
Řetězec k datu
Zde je příklad seslání řetězce na datum:
SELECT CAST('09 Feb 2030' AS date);
Výsledek:
2030-02-09
V tomto případě CAST()
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 CAST('Next Xmas' AS date);
Výsledek:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Místní nastavení
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 CAST('09/02/2030' AS date);
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 CAST('09/02/2030' AS date);
Výsledek:
2030-09-02
Tentokrát to datum interpretovalo jako druhý den září.
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 'Likes: ' + CAST(178 AS VARCHAR(10));
Výsledek:
Likes: 178
Pokud jej neodesíláme, stane se toto:
SELECT 'Likes: ' + 178;
Výsledek:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Likes: ' 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 pokusí převést řetězec na celé číslo. To se však 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í CAST()
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,
CAST(ProductName AS VARCHAR(20)) 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
CAST()
funkce funguje podobným způsobem jako CONVERT()
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.