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

Convertir 'datetime' en 'smalldatetime' dans SQL Server (exemples T-SQL)

Cet article contient des exemples de conversion d'un datetime valeur à un smalldatetime valeur dans SQL Server.

L'un des avantages de la conversion d'un datetime valeur à smalldatetime est que vous réduisez la taille de stockage de 8 octets à 4 octets. Cependant, vous perdez de la précision en le faisant.

La dateheure Le type de données comprend une fraction de seconde à 3 chiffres. Sa précision est arrondie à des incréments de .000, .003 ou .007 secondes.

Le petitedateheure Le type de données, d'autre part, n'a pas de fraction de seconde et son composant de secondes est toujours défini sur zéro (:00). De plus, il n'a qu'une précision à la minute près.

Lorsque vous convertissez un datetime valeur à smalldatetime , la date et une partie de l'heure sont copiées. Le composant des secondes est défini sur zéro (quelle que soit la valeur d'origine) et l'heure est arrondie à la minute la plus proche. Toutes les fractions de seconde sont supprimées.

Exemple 1 – Conversion implicite

Voici un exemple de conversion implicite entre datetime et smalldatetime .

DECLARE 
  @thedatetime datetime, 
  @thesmalldatetime smalldatetime;
SET @thedatetime = '2025-05-21 10:15:30.123';
SET @thesmalldatetime = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thesmalldatetime AS 'smalldatetime';

Résultat :

+-------------------------+---------------------+
| datetime                | smalldatetime       |
|-------------------------+---------------------|
| 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 |
+-------------------------+---------------------+

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 datetime valeur à un smalldatetime variables.

Dans cet exemple, nous pouvons voir que le smalldatetime n'inclut pas les fractions de seconde, les secondes ont été définies sur zéro et la minute a été arrondie.

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 datetime et smalldatetime .

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';

Résultat :

+-------------------------+---------------------+
| datetime                | smalldatetime       |
|-------------------------+---------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 |
+-------------------------+---------------------+

Vous avez peut-être remarqué que dans cet exemple, j'ai changé les fractions de seconde lors de l'attribution de la valeur initiale à @thedatetime . Mais parce que je l'attribue à un datetime type de données, la fraction de seconde est arrondie (car sa précision est arrondie à des incréments de 0,000, 003 ou 007 secondes). Dans ce cas, j'essaie d'attribuer une fraction de seconde de 125 mais il est arrondi à 127 .

Cependant, cela n'affecte pas le smalldatetime valeur.

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

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

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';

Résultat :

+-------------------------+---------------------+
| datetime                | smalldatetime       |
|-------------------------+---------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 |
+-------------------------+---------------------+