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

Eksempler på konvertering af 'dato' til 'datetime' i SQL Server (T-SQL)

Denne artikel indeholder eksempler på konvertering af en dato værdi til en datotid værdi i SQL Server.

Når du konverterer en dato værdi til datetime , tilføjes ekstra information til værdien. Dette skyldes, at datetime datatypen indeholder både dato- og tidsinformation. datoen datatype indeholder på den anden side kun datooplysninger.

Eksempel 1 – Implicit konvertering

Her er et eksempel på en implicit konvertering mellem dato og datotid .

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Resultat:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Dette er en implicit konvertering, fordi vi ikke bruger en konverteringsfunktion (som dem nedenfor) til eksplicit at konvertere den. I dette tilfælde udfører SQL Server en implicit konvertering bag kulisserne, når vi forsøger at tildele datoen værdi til en datotid variabel.

Vi kan se, at datoen variabel indeholder kun datooplysninger, hvorimod datetime variabel indeholder både dato og klokkeslæt.

Når du konverterer mellem dato og datotid , er tidskomponenten indstillet til 00:00:00.000 . Dette skyldes, at datoværdien ikke indeholder nogen tidsinformation, så der er ingen måde for SQL Server at vide, hvad tid du ønsker (hvis nogen).

Eksempel 2 – Rediger klokkeslættet

Hvis du har brug for at ændre klokkeslættet (men beholde den samme dato), kan du bruge DATEADD() funktion til at gøre netop det.

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SET @thedatetime = DATEADD(hour, 8, @thedatetime)
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Resultat:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Eksempel 3 – Eksplicit konvertering ved hjælp af CAST()

Her er et eksempel på en eksplicit konvertering. I dette tilfælde bruger jeg CAST() funktion direkte i SELECT erklæring om eksplicit at konvertere mellem dato og datotid .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime) AS 'datetime';

Resultat:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Så vi får det samme resultat som den implicitte konvertering.

Vi kan også justere tiden sådan her:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';

Resultat:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Eksempel 4 – Eksplicit konvertering ved hjælp af CONVERT()

Her er et eksempel på en eksplicit konvertering ved hjælp af CONVERT() funktion i stedet for CAST() .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime, @thedate) AS 'datetime';

Resultat:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Og justering af tiden:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';

Resultat:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

  1. Opret ny tabel ved at vælge data fra andre tabeller med CREATE TABLE AS

  2. en optælling for hver joinforbindelse - optimering

  3. Sådan fungerer ROW_NUMBER() i SQL Server

  4. SQL*Plus hvordan accepterer man tekstvariabel fra prompt?