sql >> Database >  >> RDS >> Sqlserver

Converteer 'datetime2' naar 'date' in SQL Server (T-SQL-voorbeelden)

Dit artikel bevat voorbeelden van het converteren van een datetime2 waarde tot een datum waarde in SQL Server.

Wanneer u een datetime2 . converteert waarde tot een datum gegevenstype, verliest u het tijdsgedeelte. U verkleint echter ook de opslagcapaciteit van 7 tot 9 bytes tot 3 bytes. In ieder geval zou je deze conversie alleen doen als je het tijdsgedeelte niet nodig hebt.

De datetime2 gegevenstype omvat de datum en tijd met een fractie van een seconde tussen 0 en 7 (dit hangt af van het aantal fracties dat eraan is toegewezen). De nauwkeurigheid is 100 nanoseconden.

De datum gegevenstype daarentegen omvat niet de tijd en heeft een nauwkeurigheid van 1 dag.

Voorbeeld 1 – Impliciete conversie

Hier is een voorbeeld van een impliciete conversie tussen datetime2 en 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';

Resultaat:

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

Dit is een impliciete conversie omdat we geen conversiefunctie (zoals hieronder) gebruiken om deze expliciet te converteren. In dit geval voert SQL Server achter de schermen een impliciete conversie uit wanneer we proberen de datetime2 toe te wijzen waarde tot een datum variabel.

Hier kunnen we zien dat de datum waarde bevat alleen de datum (zonder de tijdcomponent).

In dit voorbeeld is de datetime2 waarde gebruikt de standaardprecisie (wat resulteert in 7 decimalen). Dit kan worden teruggebracht tot een willekeurig aantal en het conversieresultaat zou hetzelfde zijn.

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';

Resultaat:

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

Voorbeeld 2 – Expliciete conversie met CAST()

Hier is een voorbeeld van een expliciete conversie. In dit geval gebruik ik de CAST() functie direct binnen de SELECT statement om expliciet te converteren tussen datetime2 en datum .

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

Resultaat:

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

Voorbeeld 3 – Expliciete conversie met CONVERT()

Hier is een voorbeeld van een expliciete conversie met de CONVERT() functie in plaats van CAST() .

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

Resultaat:

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

  1. Hoe sql*plus te gebruiken in het Windows-opdrachtscript om de stroom te regelen?

  2. Back-up en herstel van FILESTREAM-enabled database

  3. Opgeslagen procedure uitvoeren vanuit Laravel

  4. MySQL #1093 - U kunt geen 'weggeefacties' voor de doeltabel specificeren voor update in de FROM-clausule