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

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

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

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

La dateheure Le type de données, d'autre part, comprend une fraction de seconde à 3 chiffres et sa précision est arrondie à des incréments de 0,000, 003 ou 007 secondes.

Lorsque vous convertissez un smalldatetime valeur à datetime , le smalldatetime la valeur est copiée dans le datetime valeur. Les fractions de seconde sont définies sur 0.

Dans la plupart des cas, vous feriez mieux de convertir en un datetime2 type de données au lieu d'un datetime . Cela fournira une précision accrue, tout en utilisant la même taille de stockage. Cependant, si vous avez vraiment besoin que ce soit datetime , voici quelques exemples.

Exemple 1 – Conversion implicite

Voici un exemple de conversion implicite entre smalldatetime et dateheure .

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

Résultat :

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

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

Dans cet exemple, nous pouvons voir que le smalldatetime La valeur n'inclut pas les fractions de seconde, les secondes ont été définies sur zéro et la minute a été arrondie à partir de la valeur réelle que j'ai essayé de lui attribuer.

Cependant, la datetime La valeur comprend une partie fractionnaire à 3 chiffres définie sur zéro.

Exemple 2 - Modifier la partie fractionnaire

Même si la partie fractionnaire est définie sur zéro, une fois que vous avez converti la valeur en datetime , vous pouvez maintenant modifier la partie fractionnaire (et la partie secondes d'ailleurs).

Dans cet exemple, j'utilise le DATEADD() fonction pour modifier les fractions de seconde de datetime valeur.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime',
  DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';

Résultat (en utilisant la sortie verticale) :

smalldatetime     | 2025-05-21 10:16:00
datetime          | 2025-05-21 10:16:00.000
datetime Modified | 2025-05-21 10:16:00.123

Exemple 3 - 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 smalldatetime et dateheure .

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

Résultat :

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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

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

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

Résultat :

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Comme mentionné, envisagez de convertir en un datetime2 type de données au lieu de datetime . Cela offre une précision accrue, tout en utilisant la même taille de stockage.