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

Konverter 'datetime2' til 'date' i SQL Server (T-SQL-eksempler)

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

Når du konverterer en datetime2 værdi til en dato datatype, mister du tidsdelen. Du reducerer dog også lagerstørrelsen fra mellem 7 og 9 bytes ned til 3 bytes. Under alle omstændigheder vil du kun foretage denne konvertering, hvis du ikke har brug for tidsdelen.

datetime2 datatypen inkluderer datoen og klokkeslættet med en brøksekundersdel mellem 0 og 7 (dette afhænger af, hvor mange brøksekunder der er tildelt den). Dens nøjagtighed er 100 nanosekunder.

datoen datatypen på den anden side inkluderer ikke tiden, og den har en nøjagtighed på 1 dag.

Eksempel 1 – Implicit konvertering

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

DECLARE 
  @thedatetime2 datetime2, 
  @thedate date;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedate = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedate AS 'date';

Resultat:

+-----------------------------+------------+
| datetime2                   | date       |
|-----------------------------+------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 |
+-----------------------------+------------+

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 datetime2 værdi til en dato variabel.

Her kan vi se, at datoen værdien inkluderer kun datoen (uden tidskomponenten).

I dette eksempel er datetime2 værdi bruger standardpræcisionen (hvilket resulterer i 7 decimaler). Dette kunne reduceres til et hvilket som helst tal, og konverteringsresultatet ville være det samme.

DECLARE 
  @thedatetime2 datetime2(0), 
  @thedate date;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedate = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedate AS 'date';

Resultat:

+---------------------+------------+
| datetime2           | date       |
|---------------------+------------|
| 2025-05-21 10:15:30 | 2025-05-21 |
+---------------------+------------+

Eksempel 2 – 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 sætning til eksplicit at konvertere mellem datetime2 og dato .

DECLARE @thedatetime2 datetime2(4);
SET @thedatetime2 = '2025-05-21 10:15:30.1234';
SELECT 
  @thedatetime2 AS 'datetime2',
  CAST(@thedatetime2 AS date) AS 'date'; 

Resultat:

+--------------------------+------------+
| datetime2                | date       |
|--------------------------+------------|
| 2025-05-21 10:15:30.1234 | 2025-05-21 |
+--------------------------+------------+

Eksempel 3 – 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 @thedatetime2 datetime2(4);
SET @thedatetime2 = '2025-05-21 10:15:30.1234';
SELECT 
  @thedatetime2 AS 'datetime2',
  CONVERT(date, @thedatetime2) AS 'date'; 

Resultat:

+--------------------------+------------+
| datetime2                | date       |
|--------------------------+------------|
| 2025-05-21 10:15:30.1234 | 2025-05-21 |
+--------------------------+------------+

  1. Hvad er de kendte måder at gemme en træstruktur i en relationel DB?

  2. Hvordan kan jeg oprette en bruger i SQL Server Express-databasen, jeg føjede til mit projekt?

  3. PostgreSQL sletning med indre joinforbindelse

  4. Kom godt i gang med Postgres 13 på Ubuntu 20.04