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

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

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

Lorsque vous convertissez une date 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. La date Le type de données, en revanche, ne contient que des informations de date.

Exemple 1 – Conversion implicite

Voici un exemple de conversion implicite entre date et dateheure .

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Résultat :

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00: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 la date valeur à un datetime variables.

Nous pouvons voir que la date la variable ne contient que des informations de date, alors que la variable datetime La variable contient à la fois des informations de date et d'heure.

Lorsque vous convertissez entre date et dateheure , le composant horaire est défini sur 00:00:00.000 . En effet, la valeur de date ne contient aucune information d'heure, il n'y a donc aucun moyen pour SQL Server de savoir quelle heure vous voulez (le cas échéant).

Exemple 2 - Modifier l'heure

Si vous avez besoin de changer l'heure (mais gardez la même date), vous pouvez utiliser le DATEADD() fonction pour faire exactement cela.

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SET @thedatetime = DATEADD(hour, 8, @thedatetime)
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Résultat :

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

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 date et dateheure .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime) AS 'datetime';

Résultat :

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Nous obtenons donc le même résultat que la conversion implicite.

Nous pouvons également ajuster l'heure comme ceci :

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';

Résultat :

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00: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 @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime, @thedate) AS 'datetime';

Résultat :

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Et régler l'heure :

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';

Résultat :

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+