sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar mellan datumformat i SQL Server med CAST()

I SQL Server kan du använda CONVERT() funktion för att konvertera ett datumvärde från en datumdatatyp till en annan (eller mellan någon annan datatyp för den delen). Det är dock inte den enda funktionen i T-SQL-verktygslådan för att konvertera mellan datatyper.

CAST() funktion är en del av ANSI SQL-standarden och den gör det mesta CONVERT() gör. Så i många fall har du möjlighet att välja vilken av dessa funktioner du föredrar att använda.

Många databasproffs föredrar CAST() på grund av det faktum att det är en del av ANSI SQL-standarden, men andra föredrar CONVERT() på grund av den extra funktionalitet som T-SQL:s implementering erbjuder (som att kunna tillhandahålla en datumstil).

I alla fall ger den här artikeln exempel på konvertering mellan olika datumformat med CAST() .

Syntax

Syntaxen ser ut så här:

CAST ( expression AS data_type [ ( length ) ] )

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 .

Exempel 1 – Kasta SYSDATETIME() som datum

I det här exemplet genererar vi aktuellt datum/tid med SYSDATETIME() funktion och cast returvärdet som 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,
    CAST(SYSDATETIME() AS date) AS Converted;

Resultat:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-07 00:15:32.9265884 | 2018-06-07  |
+-----------------------------+-------------+

Exempel 2 – Kasta SYSDATETIME() som smalldatetime

I det här exemplet castar vi datumet som en smalldatetime datatyp.

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

Resultat:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 |
+-----------------------------+---------------------+

Exempel 3 – Kasta SYSDATETIME() som datumtidsförskjutning

I det här exemplet castar vi datumet som en datetimeoffset datatyp.

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

Resultat:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 |
+-----------------------------+------------------------------------+

Exempel 4 – Cast SYSDATETIME() som tid

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

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

Resultat:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 |
+-----------------------------+------------------+

Exempel 5 – Kasta SYSDATETIMEOFFSET() som datum

Här är ett exempel som använder en annan funktion för att generera det ursprungliga datum-/tidsvärdet:

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

Resultat:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Exempel 6 – Konvertering 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, 
    CAST(LastEditedWhen AS date) 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  |
+-----------------------------+-------------+

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


  1. Dela upp IPv4-adressen i 4 nummer i Oracle sql

  2. Oracle :välj maximalt värde från olika kolumner i samma rad

  3. Hur Sind() fungerar i PostgreSQL

  4. Byt roll efter anslutning till databasen