sql >> Databáze >  >> RDS >> Sqlserver

Porovnejte data v T-SQL, ignorujte časovou část

Nejrozumnějším způsobem, jak toho dosáhnout, je odstranit časovou část z hodnot datetime a porovnat výsledky a nejlepší způsob, jak odstranit časovou část z dat a času, je tento:

cast(current_timestamp as date)    

Kdysi jsem používal a obhajoval proces, který vypadal jako jeden z následujících dvou řádků:

cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))

Ale teď, když má SQL Server Date typu, který neobsahuje časovou složku, není důvod používat ani jednu z těchto technik.

Ještě jedna věc, kterou je třeba mít na paměti, je, že to stále uvízne dotaz, pokud to potřebujete udělat pro dvě hodnoty datetime pro každý řádek v klauzuli where nebo podmínce spojení. Pokud je to možné, chcete to nějak zohlednit, aby to bylo co nejvíce předpočítáno, například pomocí pohledu nebo vypočítaného sloupce.

Nakonec si všimněte, že funkce DATEDIFF porovnává počet překročených hranic. To znamená datum ve dnech mezi '2009-09-14 11:59:59' a '2009-09-15 00:00:01' je 1, i když uplynuly pouze 2 sekundy, ale DATEDIFF ve dnech mezi '2009-09-15 00:00:01' a '2009-09-15 11:59:59' je stále nula, i když uplynulo 86 398 sekund. Tam vůbec nezáleží na časové části, ale jen na hranicích. V závislosti na tom, o co se váš dotaz pokouší, to možná budete moci využít ve svůj prospěch.



  1. Jak SHOWPLAN_XML funguje v SQL Server

  2. Jak funguje funkce REPLICATE() v SQL Server (T-SQL)

  3. seznam Postgres typu ENUM

  4. Vytvoření aplikace Java v Oracle JDeveloper, část 1