sql >> Databáze >  >> RDS >> Sqlserver

Jak převést z jednoho formátu data na jiný v SQL Server pomocí CONVERT()

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 xmlvelký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.


  1. 12c Změny DBA_USERS

  2. Jak oříznout řetězce v SQL

  3. Jak přidat pouze odlišné hodnoty pomocí SQLite Sum()

  4. Jak provést proceduru uvnitř balíčku v Oracle