J'ai la requête suivante,
SELECT * FROM LOGS
WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18')
cette requête ne renvoie aucun résultat, mais la requête suivante renvoie le résultat,
SELECT * FROM LOGS WHERE CHECK_IN >= CONVERT(datetime,'2013-10-17')
pourquoi la première requête ne renvoie aucun résultat? Si j'ai commis une erreur, veuillez me corriger.
Avez-vous des moments associés à vos dates? BETWEEN est inclusif, mais lorsque vous convertissez 2013-10-18 à une date, celle-ci devient 2013-10-18 00: 00: 000.00. Tout ce qui est enregistré après la première seconde du 18 ne sera pas affiché en utilisant BETWEEN, sauf si vous incluez une valeur temporelle.
Essayer:
SELECT * FROM LOGS WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18 23:59:59:999')
si vous voulez chercher toute la journée du 18.
Les champs SQL DATETIME ont des millisecondes. J'ai donc ajouté 999 au champ.
La deuxième requête renvoie-t-elle des résultats à partir du 17 ou juste du 18?
La première requête ne renverra que les résultats du 17 ou du 18 à minuit.
Essayez ceci à la place
select *
from LOGS
where check_in >= CONVERT(datetime,'2013-10-17')
and check_in< CONVERT(datetime,'2013-10-19')
Vous ne rencontrez aucune erreur dans vos requêtes . Je suppose que ceci est le suivant:
Vous devez convertir le champ de date en varchar pour supprimer l’heure, puis le reconvertir en date-heure. L’heure sera réinitialisée à «00: 00: 00.000».
SELECT *
FROM [TableName]
WHERE
(
convert(datetime,convert(varchar,GETDATE(),1))
between
convert(datetime,convert(varchar,[StartDate],1))
and
convert(datetime,convert(varchar,[EndDate],1))
)
A partir de SQL Server 2008, vous avez le format "date".
Afin que vous puissiez utiliser
SELECT * FROM LOGS WHERE CONVERT(date,[CHECK_IN]) BETWEEN '2013-10-18' AND '2013-10-18'
https://docs.Microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql