Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Convertir 'datetime2' en 'date' dans SQL Server (exemples T-SQL)

Cet article contient des exemples de conversion d'un datetime2 valeur à une date valeur dans SQL Server.

Lorsque vous convertissez un datetime2 valeur à une date type de données, vous perdez la partie heure. Cependant, vous réduisez également la taille de stockage de 7 à 9 octets à 3 octets. Dans tous les cas, vous n'effectuerez cette conversion que si vous n'avez pas besoin de la partie horaire.

Le datetime2 Le type de données comprend la date et l'heure avec une fraction de seconde comprise entre 0 et 7 (cela dépend du nombre de fractions de seconde qui lui sont attribuées). Sa précision est de 100 nanosecondes.

La date type de données, d'autre part, n'inclut pas l'heure et a une précision de 1 jour.

Exemple 1 – Conversion implicite

Voici un exemple de conversion implicite entre datetime2 et date .

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

Résultat :

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

Il s'agit d'une conversion implicite car nous n'utilisons pas de fonction de conversion (comme celles ci-dessous) pour la convertir explicitement. Dans ce cas, SQL Server effectue une conversion implicite dans les coulisses lorsque nous essayons d'attribuer le datetime2 valeur à une date variables.

Ici, nous pouvons voir que la date La valeur inclut uniquement la date (sans le composant d'heure).

Dans cet exemple, le datetime2 value utilise la précision par défaut (qui se traduit par 7 décimales). Cela pourrait être réduit à n'importe quel nombre et le résultat de la conversion serait le même.

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

Résultat :

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

Exemple 2 - Conversion explicite à l'aide de CAST()

Voici un exemple de conversion explicite. Dans ce cas, j'utilise le CAST() fonction directement dans le SELECT déclaration pour convertir explicitement entre datetime2 et date .

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

Résultat :

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

Exemple 3 - Conversion explicite à l'aide de CONVERT()

Voici un exemple de conversion explicite utilisant le CONVERT() fonction au lieu de CAST() .

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

Résultat :

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