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 | +------------+-------------------------+