it-swarm-eu.dev

Jak získat aktuální datum bez časové části

V SQL Server 2005 jak získám aktuální datum bez časové části? Používal jsem GETDATE(), ale chtěl bych, aby měl čas 00: 00: 00.0

88
Piers Myers

nejrychlejší , pokud musíte iterovat přes sadu záznamů a nemáte datum na serveru SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

Vycházejí to dvě různé a vynikající odpovědi na StackOverflow: One , Two

Konverze Varchar jsou jedním z nejhorších způsobů, jak toho dosáhnout. Samozřejmě, pro jednu hodnotu to nemusí záležet, ale je to dobrý zvyk se dostat do.

Tento způsob je také deterministický, řekněme, zda chcete indexovat vypočítaný sloupec. I lidé, kteří píšou knihy o SQL Serveru, dostanou chyceni při převodu datetime

Tato technika je také rozšiřitelná.

  • včera: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • začátek měsíce: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • konec minulého měsíce: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • začátek příštího měsíce: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Upravit:

Jak jsem zmínil o determinismu, metody varchar nejsou bezpečné, pokud nepoužijete styl 112.

Jiné odpovědi zde poukazují na to, že byste to nikdy nepoužili na sloupec. To je správné, ale možná budete chtít vybrat řádky 100 000 nebo přidat vypočítaný sloupec nebo seskupit podle data. Pak musíte použít tuto metodu.

Druhá odpověď také zmiňuje styl 110. Toto není jazyk nebo SET DATEFORMAT bezpečné a selže při nastavení „britského“ jazyka. Viz konečný průvodce datovými typy datetime od Tibora Karasziho.

125
gbn

Musíte jej převést na varchar s určením vzoru formátu (v tomto případě 110) a pak převést (nebo odevzdat) zpět na datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
6
mrdenny