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

Jaký je nejlepší způsob, jak zkrátit datum na serveru SQL Server?

Pro zaokrouhlení na nejbližší celý den , existují tři široce používané přístupy. První používá datediff zjistit počet dní od 0 čas schůzky. 0 datetime odpovídá 1. lednu 1900. Přidáním rozdílu dne k datu zahájení zaokrouhlíte na celý den;

select dateadd(d, 0, datediff(d, 0, getdate()))

Druhá metoda je textová:zkrátí textový popis pomocí varchar(10) , ponechá se pouze část data:

select convert(varchar(10),getdate(),111)

Třetí metoda využívá skutečnost, že datetime je skutečně plovoucí desetinná čárka představující počet dní od roku 1900. Takže zaokrouhlením na celé číslo, například pomocí floor , získáte začátek dne:

select cast(floor(cast(getdate() as float)) as datetime)

Chcete-li odpovědět na vaši druhou otázku, začátek týdne je složitější. Jedním ze způsobů je odečíst den v týdnu:

select dateadd(dd, 1 - datepart(dw, getdate()), getdate())

Tím se také vrátí časová část, takže byste ji museli zkombinovat s jednou z metod odřezávání času, abyste se dostali k prvnímu rande. Například pomocí @start_of_day jako proměnná pro čitelnost:

declare @start_of_day datetime
set @start_of_day = cast(floor(cast(getdate() as float)) as datetime)
select dateadd(dd, 1 - datepart(dw, @start_of_day), @start_of_day)

Začátek roku, měsíc, hodina a minuta stále pracovat s přístupem „rozdíl od roku 1900“:

select dateadd(yy, datediff(yy, 0, getdate()), 0)
select dateadd(m, datediff(m, 0, getdate()), 0)
select dateadd(hh, datediff(hh, 0, getdate()), 0)
select dateadd(mi, datediff(mi, 0, getdate()), 0)

Zaokrouhlování po sekundách vyžaduje jiný přístup, protože počet sekund od 0 dává přepad. Jeden způsob, jak to obejít, je použít jako referenční datum začátek dne namísto roku 1900:

declare @start_of_day datetime
set @start_of_day = cast(floor(cast(getdate() as float)) as datetime)
select dateadd(s, datediff(s, @start_of_day, getdate()), @start_of_day)

Pro zaokrouhlení o 5 minut , upravte způsob zaokrouhlování minut. Vezměte kvocient minutového rozdílu, například pomocí /5*5 :

select dateadd(mi, datediff(mi,0,getdate())/5*5, 0)

Funguje to také čtvrt hodiny a půl hodiny.



  1. Jak získat ID posledního aktualizovaného řádku v MySQL?

  2. Jak mohu změnit existující sloupec jako identitu v PostgreSQL 11.1

  3. Agregáty a dělení

  4. sqlite:jak přidat celkový čas hh:mm:ss, kde je datový typ sloupce DATETIME?