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

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

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

Lorsque vous convertissez une heure valeur à datetime , des informations supplémentaires sont ajoutées à la valeur. C'est parce que le datetime Le type de données contient à la fois des informations de date et d'heure. Le temps Le type de données, en revanche, ne contient que des informations temporelles. Par conséquent, les informations de date sont ajoutées à la valeur lorsque vous effectuez une telle conversion. Plus précisément, la date est définie sur "1900-01-01".

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 déclaration pour convertir explicitement à partir de temps à dateheure .

DECLARE @thetime timeSET @thetime ='23:15:59.004007'SELECT @thetime AS 'time', CAST(@thetime AS datetime) AS 'datetime';

Résultat :

+------------------+-------------------------+| temps | dateheure ||------------------+-------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+------------------+-------------------- ------+

Lorsque vous convertissez à partir de temps à dateheure , le composant de date est défini sur 1900-01-01 .

Notez également que la valeur temporelle elle-même est présentée différemment dans ces deux types de données. Le temps Le type de données ajoute un zéro à la fin (parce qu'il a une plus grande précision - son échelle par défaut est 7). D'autre part, datetime les valeurs utilisent une échelle inférieure et sont arrondies à des incréments de 0,000, 0,003 ou 0,007 secondes. Si vous trouvez cela problématique, envisagez de convertir en datetime2 Au lieu.

Exemple 2 – Précision/échelle inférieure

Dans l'exemple précédent, le temps la valeur avait une précision en fractions de secondes plus élevée que la datetime valeur. C'est parce qu'il utilise une échelle par défaut de 7. Mais nous pouvons changer cela en une valeur inférieure si nécessaire.

Juste pour être clair, échelle est le nombre de chiffres à droite de la virgule décimale dans un nombre. Précision est le nombre total de chiffres du nombre. Nous pouvons spécifier l'échelle en ajoutant un nombre entre parenthèses au type de données.

Voici ce qui se passe si je définis explicitement l'heure valeur pour avoir un inférieur échelle que la datetime valeur.

DECLARE @thetime time(0)SET @thetime ='23:15:59.004007'SELECT @thetime AS 'time', CAST(@thetime AS datetime) AS 'datetime';

Résultat :

+----------+-------------------------+| temps | dateheure ||----------+-------------------------|| 23:15:59 | 1900-01-01 23:15:59.000 |+----------+-------------------------+ 

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 @thetime timeSET @thetime ='23:15:59.004007'SELECT @thetime AS 'time', CONVERT(datetime, @thetime) AS 'datetime';

Résultat :

+------------------+-------------------------+| temps | dateheure ||------------------+-------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+------------------+-------------------- ------+

Exemple 4 – Conversion implicite

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

DECLARE @thetime time, @thedatetime datetimeSET @thetime ='23:15:59.004007'SET @thedatetime =@thetimeSELECT @thetime AS 'time', @thedatetime AS 'datetime' ;

Résultat :

+------------------+-------------------------+| temps | dateheure ||------------------+-------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+------------------+-------------------- ------+

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 l'heure valeur à un datetime variables.

Exemple 5 - Modifier la date

Si vous devez changer la date (mais garder la même heure), vous pouvez utiliser le DATEADD() une fonction.

DECLARE @thetime time, @thedatetime datetimeSET @thetime ='23:15:59.004007'SET @thedatetime =@thetimeSET @thedatetime =DATEADD(year, 120, @thedatetime)SELECT @thetime AS 'time', @thedatetime AS 'dateheure';

Résultat :

+------------------+-------------------------+| temps | dateheure ||------------------+-------------------------|| 23:15:59.0040070 | 2020-01-01 23:15:59.003 |+------------------+------------------- ------+

Dans ce cas, j'ajoute 120 à la valeur de l'année, ce qui l'amène à 2020.