sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar från ett datumformat till ett annat i SQL Server med CONVERT()

Ibland när man arbetar med databaser och andra programmeringsmiljöer får man ett datumvärde men det är i fel format/datatyp. Till exempel, om ett datum har genererats med en inbyggd datumfunktion, kan det innehålla både datum och tid, ända ner till sista nanosekund. Och allt du vill ha är dagen, månaden och året, säg så här:2018-01-01.

Om detta händer medan du använder SQL Server kan du använda CONVERT() funktion för att konvertera den till en annan datatyp. När du gör detta kommer datatypen att avgöra vilket format den visas som.

Den här artikeln ger exempel på hur du använder CONVERT() funktion i SQL Server för att konvertera ett datumvärde till en annan (datum) datatyp.

Syntax

Först, så här går den officiella syntaxen till:

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

Dessa argument definieras enligt följande:

expression
Alla giltiga uttryck.
data_type
Måldatatypen. Detta inkluderar xmlstor och sql_variant . Alias ​​datatyper kan inte användas.
length
Ett valfritt heltal som anger längden på måldatatypen. Standardvärdet är 30 .
style
Ett heltalsuttryck som anger hur CONVERT() funktion kommer att översätta uttryck . För stilvärdet NULL returneras NULL. data_type bestämmer intervallet.

Exempel 1 – Konvertera från SYSDATETIME() till datatyp

I det här exemplet genererar vi aktuellt datum/tid med SYSDATETIME() funktion och konvertera det till ett datum datatyp.

Observera att SYSDATETIME() genererar sitt värde som en datetime2(7) datatyp, så vi konverterar den från den datatypen till en annan datatyp.

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

Resultat:

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

Exempel 2 – Konvertera från SYSDATETIME() till smalldatetime-datatyp

I det här exemplet konverterar vi datumet till en smalldatetime datatyp.

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

Resultat:

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

Exempel 3 – Konvertera från SYSDATETIME() till datetimeoffset datatyp

I det här exemplet konverterar vi datumet till en datetimeoffset datatyp.

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

Resultat:

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

Exempel 4 – Konvertera från SYSDATETIME() till tidsdatatyp

Du är inte begränsad till att visa värdets datumkomponent. Du kan också konvertera den till en tid datatyp, så att endast tidskomponenten returneras. Så här:

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

Resultat:

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

Exempel 5 – Konvertera från SYSDATETIMEOFFSET()

De tidigare exemplen använder alla samma inbyggda funktion för att generera datum/tid-värdet, men det behöver naturligtvis inte genereras av denna funktion. Här är ett exempel med SYSDATETIMEOFFSET() :

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

Resultat:

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

Exempel 6 – Konvertera från en databasfråga

Här är ett exempel på att konvertera datumet som har hämtats från en kolumn i WideWorldImporters exempeldatabas:

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

Resultat:

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

Observera att du inte är begränsad till att bara konvertera mellan två olika datumformat. Om du till exempel har ett datum lagrat som en sträng kan du också använda CONVERT() att konvertera från en sträng till ett datum, såväl som alla andra datatyper som du kan behöva konvertera till.

Jag har också skrivit ett inlägg som visar hur man konverterar mellan datumformat med CAST() funktion med samma exempel som ovan.


  1. Min OOW15-resa är klar

  2. SQLiteStatement kör en SELECT / INSERT / DELETE / UPDATE

  3. Hur kan jag lösa inkompatibla med sql_mode=only_full_group_by i laravel vältalig?

  4. 8 sätt att lägga till dagar till ett datum i MariaDB