Salve,
il filtro BETWEEN '2022-12-12 00:00:00' AND '2022-12-12 23:59:59' non e' completamente corretto in quanto SQL Server gestisce il tipo datetime con approssimazione ai 3ms, con delle... approssimazioni...
eseguendo
SELECT DATEADD(ms, -2, '2022-12-13') [LastOfDay], DATEADD(ms, 2, '2022-12-13') [FirstOfDay]
--<--------
LastOfDay FirstOfDay
----------------------- -----------------------
2022-12-12 23:59:59.997 2022-12-13 00:00:00.003
appare evidente che ci sono 3 ms nei quali viene arrotondato sempre...
ad ogni modo, "l'ultimo tik" della giornata avviene alle 23:59:59.997
quindi il filtro sopra indicato esclude 997 ms, personalmente ho avuto a che fare con questo problema che ha causato non pochi problemi.
Le scelte "tradizionali" di ricerca, quindi, si basano su come definire il time frame, e la soluzione piu' spesso utilizzata e'
WHERE colonnaDateTime >= '2022-01-01' AND colonnaDateTime < '2022-01-02'
al fine di non perdere pezzi indietro. L'operatore BETWEEN NON e' comprensivo in questo senso.
Altre soluzioni riguardano l'estrazione della sola parte data dal tipo, e a seconda delle versioni di SQL Server si sono viste svariate proposte. SQL Server 2022 aggiunge DATETRUNC ! :D
Tipicamente si utilizza
SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)
dove GETDATE() in questo caso sostituisce il valore della colonna da filtrare, e si basa sul concetto di estrarre la differenza in giorni tra il valore ed il giorno "0" (01/01/1900), ed a questo poi aggiungere questa differenza in giorni al giorno "0", ottenendo quindi un valore DATE arrotondato alla mezzanotte, quindi 0:0:0
quindi, alla fine della fiera, il confronto diventa
DECLARE @param DATETIME = GETDATE();
SELECT *
FROM ...
WHERE DATEADD(dd, DATEDIFF(dd,0, @param ), 0) = DATEADD(dd, DATEDIFF(dd,0, GETDATE()), 0) --< - nome della colonna
salutoni romagnoli,
--
Andrea