sql >> Database >  >> RDS >> Sqlserver

Hoe te converteren van de ene datumnotatie naar de andere in SQL Server met CONVERT()

Soms krijg je bij het werken met databases en andere programmeeromgevingen een datumwaarde, maar deze is in het verkeerde formaat/gegevenstype. Als een datum bijvoorbeeld is gegenereerd met een ingebouwde datumfunctie, kan deze zowel de datum als de tijd bevatten, tot op de laatste nanoseconde. En alles wat je wilt is de dag, de maand en het jaar, zeg zo:01-01-2018.

Als dit gebeurt terwijl u SQL Server gebruikt, kunt u de CONVERT() gebruiken functie om het naar een ander gegevenstype te converteren. Wanneer u dit doet, bepaalt het gegevenstype het formaat waarin het wordt weergegeven.

Dit artikel geeft voorbeelden van het gebruik van de CONVERT() functie in SQL Server om een ​​datumwaarde om te zetten naar een ander (datum)gegevenstype.

Syntaxis

Ten eerste, hier is hoe de officiële syntaxis werkt:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Deze argumenten worden als volgt gedefinieerd:

expression
Elke geldige uitdrukking.
data_type
Het doelgegevenstype. Dit omvat xmlgroot , en sql_variant . Alias-gegevenstypen kunnen niet worden gebruikt.
length
Een optioneel geheel getal dat de lengte van het doelgegevenstype aangeeft. De standaardwaarde is 30 .
style
Een integer-expressie die specificeert hoe de CONVERT() functie vertaalt uitdrukking . Voor een stijlwaarde NULL wordt NULL geretourneerd. data_type bepaalt het bereik.

Voorbeeld 1 – Converteren van SYSDATETIME() naar datumgegevenstype

In dit voorbeeld genereren we de huidige datum/tijd met de SYSDATETIME() functie en converteer dat naar een datum gegevenstype.

Merk op dat de SYSDATETIME() genereert zijn waarde als een datetime2(7) gegevenstype, dus we converteren het van dat gegevenstype naar een ander gegevenstype.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(date, SYSDATETIME()) AS Converted;

Resultaat:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-06 22:53:47.2318751 | 2018-06-06  |
+-----------------------------+-------------+

Voorbeeld 2 – Converteren van SYSDATETIME() naar datatype smalldatetime

In dit voorbeeld converteren we de datum naar een smalldatetime gegevenstype.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(smalldatetime, SYSDATETIME()) AS Converted;

Resultaat:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 |
+-----------------------------+---------------------+

Voorbeeld 3 – Converteren van SYSDATETIME() naar datatimeoffset datatype

In dit voorbeeld converteren we de datum naar een datetimeoffset gegevenstype.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;

Resultaat:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 |
+-----------------------------+------------------------------------+

Voorbeeld 4 – Converteren van SYSDATETIME() naar datatype tijd

U bent niet beperkt tot het weergeven van de datumcomponent van de waarde. Je kunt het ook converteren naar een tijd gegevenstype, zodat alleen de tijdcomponent wordt geretourneerd. Zoals dit:

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(time, SYSDATETIME()) AS Converted;

Resultaat:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 |
+-----------------------------+------------------+

Voorbeeld 5 – Converteren van SYSDATETIMEOFFSET()

De vorige voorbeelden gebruiken allemaal dezelfde ingebouwde functie om de datum/tijd-waarde te genereren, maar deze hoeft natuurlijk niet door deze ene functie te worden gegenereerd. Hier is een voorbeeld met de SYSDATETIMEOFFSET() :

SELECT 
    SYSDATETIMEOFFSET() AS Original,
    CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;

Resultaat:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Voorbeeld 6 – Converteren vanuit een databasequery

Hier is een voorbeeld van het converteren van de datum die is opgehaald uit een kolom in de voorbeelddatabase van WideWorldImporters:

USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CONVERT(date, LastEditedWhen) AS 'Converted'
FROM Sales.CustomerTransactions;

Resultaat:

+-----------------------------+-------------+
| 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  |
+-----------------------------+-------------+

Merk op dat u niet beperkt bent tot het converteren tussen twee verschillende datumnotaties. Als u bijvoorbeeld een datum als tekenreeks heeft opgeslagen, kunt u ook CONVERT() gebruiken om van een tekenreeks naar een datum te converteren, evenals elk ander gegevenstype waarnaar u mogelijk moet converteren.

Ik heb ook een bericht geschreven dat laat zien hoe je kunt converteren tussen datumnotaties met behulp van de CAST() functie met dezelfde voorbeelden als hierboven.


  1. SUBDATE() Voorbeelden – MySQL

  2. SQL SERVER – Een truc om met dynamische SQL om te gaan om een ​​SQL-injectieaanval te voorkomen?

  3. Postgres-dump van alleen delen van tabellen voor een dev-snapshot

  4. Wat is het grote verschil tussen Varchar2 en char