sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan konverteres fra ét datoformat til et andet i SQL Server ved hjælp af CONVERT()

Nogle gange, når du arbejder med databaser og andre programmeringsmiljøer, får du en datoværdi, men den er i det forkerte format/datatype. For eksempel, hvis en dato er blevet genereret med en indbygget datofunktion, kan den inkludere både datoen og klokkeslættet, helt ned til det sidste nanosekund. Og alt hvad du ønsker er dagen, måneden og året, sig sådan her:2018-01-01.

Hvis dette sker, mens du bruger SQL-serveren, kan du bruge CONVERT() funktion til at konvertere den til en anden datatype. Når du gør dette, bestemmer datatypen det format, den vises som.

Denne artikel giver eksempler på brug af CONVERT() funktion i SQL Server til at konvertere en datoværdi til en anden (dato) datatype.

Syntaks

For det første, her er, hvordan den officielle syntaks går:

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

Disse argumenter er defineret som følger:

expression
Ethvert gyldigt udtryk.
data_type
Måldatatypen. Dette inkluderer xmlbigt , og sql_variant . Aliasdatatyper kan ikke bruges.
length
Et valgfrit heltal, der angiver længden af ​​måldatatypen. Standardværdien er 30 .
style
Et heltalsudtryk, der specificerer, hvordan CONVERT() funktion vil oversætte udtryk . For en stilværdi på NULL, returneres NULL. data_type bestemmer området.

Eksempel 1 – Konverter fra SYSDATETIME() til datodatatype

I dette eksempel genererer vi den aktuelle dato/tid med SYSDATETIME() funktion og konverter det til en dato datatype.

Bemærk, at SYSDATETIME() genererer sin værdi som en datetime2(7) datatype, så vi konverterer den fra den datatype til en anden datatype.

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

Resultat:

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

Eksempel 2 – Konverter fra SYSDATETIME() til smalldatetime-datatype

I dette eksempel konverterer vi datoen til en smalldatetime datatype.

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

Eksempel 3 – Konverter fra SYSDATETIME() til datetimeoffset datatype

I dette eksempel konverterer vi datoen til en datotidsforskydning datatype.

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

Eksempel 4 – Konverter fra SYSDATETIME() til tidsdatatype

Du er ikke begrænset til at vise værdiens datokomponent. Du kan også konvertere det til et tidspunkt datatype, således at kun tidskomponenten returneres. Sådan:

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

Resultat:

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

Eksempel 5 – Konverter fra SYSDATETIMEOFFSET()

De foregående eksempler bruger alle den samme indbyggede funktion til at generere dato/tidsværdien, men den behøver selvfølgelig ikke at blive genereret af denne ene funktion. Her er et eksempel, der bruger 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           |
+------------------------------------+----------------------+

Eksempel 6 – Konverter fra en databaseforespørgsel

Her er et eksempel på konvertering af datoen, der er hentet fra en kolonne i WideWorldImporters eksempeldatabase:

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

Bemærk, at du ikke er begrænset til kun at konvertere mellem to forskellige datoformater. Hvis du f.eks. har en dato gemt som en streng, kan du også bruge CONVERT() at konvertere fra en streng til en dato, såvel som enhver anden datatype, du muligvis skal konvertere til.

Jeg har også skrevet et indlæg, der viser, hvordan man konverterer mellem datoformater ved hjælp af CAST() funktion ved at bruge de samme eksempler som ovenfor.


  1. MS SQL PÅ SLET CASCADE flere fremmednøgler, der peger på den samme tabel?

  2. Oracle (11.2.0.1):Sådan identificeres rækken, som i øjeblikket er opdateret af UPDATE-sætningen

  3. At spise vores eget hundefoder – Kører JIRA på MariaDB

  4. Forsøger at få ejendom af ikke-objekt - CodeIgniter