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

Exemples de conversion de 'smalldatetime' en 'datetime' dans SQL Server (T-SQL)

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

Lorsque vous convertissez un smalldatetime valeur à datetime , les heures et les minutes sont copiées et les secondes et les fractions de secondes sont définies sur 0 .

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

Voici un exemple de conversion explicite. Dans ce cas, j'utilise le CAST() fonction directement dans le SELECT instruction pour convertir explicitement à partir de smalldatetime à dateheure .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Résultat :

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Tout d'abord, nous pouvons voir que le thesmalldatetime la valeur utilise 00 pour le composant secondes, même si nous l'avons défini explicitement sur 29 . En effet, lors de l'utilisation de thesmalldatetime type de données, les secondes sont toujours égales à zéro (et sans fraction de seconde).

Par conséquent, lorsque nous convertissons la valeur en datetime , la valeur des secondes (et les fractions de secondes) sont définies sur zéro. Si nous venions d'attribuer la valeur d'origine à datetime en premier lieu, les secondes seraient restées intactes :

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29'
SELECT @thedatetime AS 'thedatetime';

Résultat :

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.000 |
+-------------------------+

Non seulement les secondes resteraient intactes, mais toutes les fractions de seconde seraient également restées intactes (mais seulement jusqu'à une échelle de 3) :

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29.123'
SELECT @thedatetime AS 'thedatetime';

Résultat :

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.123 |
+-------------------------+

Exemple 2 – Arrondi

Voici ce qui se passe si nous définissons le composant secondes sur une valeur plus élevée avant de l'affecter au smalldatetime Type de données.

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:31'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Résultat :

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 |
+---------------------+-------------------------+

Ainsi, la composante des minutes est désormais arrondie à la minute supérieure.

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

C'est la même chose que le premier exemple, sauf que cette fois j'utilise le CONVERT() fonction au lieu de CAST() .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime, @thesmalldatetime) AS 'datetime';

Résultat :

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Exemple 4 – Conversion implicite

Voici un exemple de faire la même chose, mais en utilisant une conversion de type implicite.

DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SET @thedatetime = @thesmalldatetime
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  @thedatetime AS 'datetime';

Résultat :

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Nous obtenons donc le même résultat, qu'il s'agisse d'une conversion explicite ou implicite.

Il s'agit d'une conversion implicite car nous n'utilisons pas de fonction de conversion pour la convertir explicitement. Nous attribuons simplement la valeur d'une variable d'un type de données à une variable d'un autre type de données. Dans ce cas, SQL Server effectue une conversion implicite dans les coulisses lorsque nous essayons d'attribuer le smalldatetime valeur à un datetime variables.