sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera 'datetime2' till 'date' i SQL Server (T-SQL-exempel)

Den här artikeln innehåller exempel på hur du konverterar en datetime2 värde till ett datum värde i SQL Server.

När du konverterar en datetime2 värde till ett datum datatyp förlorar du tidsdelen. Men du minskar också lagringsstorleken från mellan 7 och 9 byte ner till 3 byte. I vilket fall som helst skulle du bara göra den här konverteringen om du inte behöver tidsdelen.

datetime2 datatypen inkluderar datum och tid med en del av bråkdelssekunder mellan 0 och 7 (detta beror på hur många bråksekunder som är tilldelade till den). Dess noggrannhet är 100 nanosekunder.

datumet datatypen å andra sidan, inkluderar inte tiden, och den har en noggrannhet på 1 dag.

Exempel 1 – Implicit konvertering

Här är ett exempel på en implicit konvertering mellan datetime2 och datum .

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

Detta är en implicit konvertering eftersom vi inte använder en konverteringsfunktion (som de nedan) för att explicit konvertera den. I det här fallet utför SQL Server en implicit konvertering bakom kulisserna när vi försöker tilldela datetime2 värde till ett datum variabel.

Här kan vi se att datumet värdet inkluderar endast datumet (utan tidskomponenten).

I det här exemplet visas datetime2 värde använder standardprecisionen (vilket resulterar i 7 decimaler). Detta kan reduceras till valfritt antal och konverteringsresultatet blir detsamma.

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

Exempel 2 – Explicit konvertering med CAST()

Här är ett exempel på en explicit konvertering. I det här fallet använder jag CAST() funktion direkt inom SELECT uttalande för att uttryckligen konvertera mellan datetime2 och datum .

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

Exempel 3 – Explicit konvertering med CONVERT()

Här är ett exempel på en explicit konvertering med CONVERT() funktion istället för 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. Funktionen lower() på internationella tecken i postgresql

  2. PostgreSQL Planet i Ansible Galaxy

  3. lägg till kolumn i mysql-tabellen om den inte finns

  4. Hur man byter ut en del av en sträng i T-SQL