Někdy při práci s databázemi a jinými programovacími prostředími získáte hodnotu data, ale je ve špatném formátu/typu dat. Pokud bylo například datum vygenerováno pomocí vestavěné funkce data, může obsahovat datum i čas, až do poslední nanosekundy. A vše, co chcete, je den, měsíc a rok, řekněte takto:2018-01-01.
Pokud k tomu dojde, když používáte SQL Server, můžete použít CONVERT()
funkci převést na jiný datový typ. Když to uděláte, typ dat určí formát, ve kterém se zobrazí.
Tento článek obsahuje příklady použití CONVERT()
funkce v SQL Server pro převod hodnoty data na jiný (datum) datový typ.
Syntaxe
Nejprve se podívejme, jak funguje oficiální syntaxe:
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řevod z datového typu SYSDATETIME() na datový typ
V tomto příkladu vygenerujeme aktuální datum/čas pomocí SYSDATETIME()
a převeďte jej na 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, CONVERT(date, SYSDATETIME()) AS Converted;
Výsledek:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Příklad 2 – Převod z datového typu SYSDATETIME() na datový typ smalldatetime
V tomto příkladu převedeme datum na smalldatetime datový typ.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Výsledek:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Příklad 3 – Převod z SYSDATETIME() na datový typ datetimeoffset
V tomto příkladu převedeme datum na datetimeoffset datový typ.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Výsledek:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Příklad 4 – Převod z SYSDATETIME() na datový typ time
Nejste omezeni na zobrazení komponenty data hodnoty. Můžete jej také převést na čas datový typ, takže je vrácena pouze časová složka. Takhle:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Výsledek:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Příklad 5 – Převod z SYSDATETIMEOFFSET()
Všechny předchozí příklady používají stejnou vestavěnou funkci pro generování hodnoty data/času, ale samozřejmě nemusí být generována touto jednou funkcí. Zde je příklad použití SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Výsledek:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +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 ve vzorové databázi WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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 | +-----------------------------+-------------+
Upozorňujeme, že nejste omezeni pouze na převod mezi dvěma různými formáty data. Pokud máte datum uložené například jako řetězec, můžete také použít CONVERT()
převést z řetězce na datum, stejně jako jakýkoli jiný datový typ, na který možná budete muset převést.
Napsal jsem také příspěvek, který ukazuje, jak převádět mezi formáty data pomocí CAST()
pomocí stejných příkladů jako výše.