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

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

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

L'un des avantages de la conversion d'un datetime2 valeur à smalldatetime consiste à réduire la taille de stockage de 7, 8 ou 9 octets à 4 octets. Cependant, vous perdez en précision.

Le datetime2 Le type de données vous permet de spécifier une précision fractionnaire de secondes de 0 à 7. Si vous ne le spécifiez pas, il utilisera 7 (la valeur par défaut). Si vous spécifiez zéro (0 ), sa précision sera à la seconde près.

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). Sa précision est à la minute près.

Lorsque vous convertissez un datetime2 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 du composant des secondes) 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 datetime2 et smalldatetime .

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

Résultat :

+-------------------------------------------+---------------- -----+| dateheure2 | petitedateheure ||-----------------------------+----------------- ----|| 2025-05-21 10:15:30.1234567 | 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 datetime2 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.

Dans ce cas, la datetime2 value utilise une précision de 7. En effet, 7 est la valeur par défaut. Je n'ai pas spécifié de précision et c'est donc la valeur par défaut qui a été utilisée.

Mais cela aurait renvoyé le même résultat quelle que soit la précision que j'ai choisie. Même si je l'avais réduit à zéro (c'est-à-dire déclaré comme datetime2(0) ), il aurait toujours renvoyé le même résultat.

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

DECLARE @thedatetime2 datetime2(0);SET @thedatetime2 ='2025-05-21 10:15:30';SELECT @thedatetime2 AS 'datetime2', CAST(@thedatetime2 AS smalldatetime) AS 'smalldatetime'; 

Résultat :

+---------------------+---------------------+| dateheure2 | petitedateheure ||---------------------+---------------------|| 2025-05-21 10:15:30 | 2025-05-21 10:16:00 |+---------------------+---------------- -----+

Dans cet exemple, j'ai décidé d'utiliser une échelle de zéro pour le datetime2 valeur (c'est-à-dire datetime2(0) ), cependant, cela n'affecte pas le résultat 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 @thedatetime2 datetime2(0);SET @thedatetime2 ='2025-05-21 10:15:30';SELECT @thedatetime2 AS 'datetime2', CONVERT(smalldatetime, @thedatetime2) AS 'smalldatetime'; 

Résultat :

+---------------------+---------------------+| dateheure2 | petitedateheure ||---------------------+---------------------|| 2025-05-21 10:15:30 | 2025-05-21 10:16:00 |+---------------------+---------------- -----+