V SQL Server můžete použít CONVERT()
funkce pro převod hodnoty data z jednoho datového typu data na jiný (nebo mezi jakýmkoli jiným datovým typem). To však není jediná funkce v sadě nástrojů T-SQL pro převod mezi datovými typy.
CAST()
funkce je součástí standardu ANSI SQL a dělá většinu věcí CONVERT()
dělá. V mnoha případech tedy máte možnost, kterou z těchto funkcí chcete používat.
Mnoho databázových profesionálů dává přednost CAST()
vzhledem k tomu, že je součástí standardu ANSI SQL, ostatní preferují CONVERT()
kvůli zvláštní funkcionalitě, kterou implementace T-SQL nabízí (jako je například možnost poskytnout styl data).
V každém případě tento článek poskytuje příklady převodu mezi různými formáty data pomocí CAST()
.
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 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
.
Příklad 1 – Odeslání SYSDATETIME() jako datum
V tomto příkladu vygenerujeme aktuální datum/čas pomocí SYSDATETIME()
a přetypovat návratovou hodnotu jako datum datový typ.
Všimněte si, že SYSDATETIME()
vygeneruje svou hodnotu jako datetime2(7) datový typ, takže jej převádíme z tohoto datového typu na jiný datový typ.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Výsledek:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Příklad 2 – Odeslání SYSDATETIME() jako smalldatetime
V tomto příkladu použijeme datum jako smalldatetime datový typ.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Výsledek:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Příklad 3 – Odeslání SYSDATETIME() jako datetimeoffset
V tomto příkladu přetypujeme datum jako datetimeoffset datový typ.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Výsledek:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Příklad 4 – Odeslání SYSDATETIME() jako času
Nejste omezeni na zobrazení komponenty data hodnoty. Můžete jej také odeslat jako čas datový typ, takže je vrácena pouze časová složka. Takhle:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Výsledek:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Příklad 5 – Odeslání SYSDATETIMEOFFSET() jako datum
Zde je příklad použití jiné funkce ke generování původní hodnoty data/času:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Výsledek:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Příklad 6 – Převod z databázového dotazu
Zde je příklad převodu data, které je načteno ze sloupce v WideWorldImporters ukázková databáze:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS 'Converted' FROM Sales.CustomerTransactions;
Výsledek:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
Napsal jsem také příspěvek, který ukazuje, jak převádět mezi formáty data pomocí CONVERT()
pomocí stejných příkladů jako výše.