Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jaki jest najlepszy sposób na skrócenie daty w SQL Server?

Aby zaokrąglić do najbliższego cały dzień , w powszechnym użyciu są trzy podejścia. Pierwszy używa datediff aby znaleźć liczbę dni od 0 data i godzina. 0 datetime odpowiada 1 stycznia 1900 roku. Dodając różnicę dni do daty początkowej, zaokrąglono do całego dnia;

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

Druga metoda jest oparta na tekście:obcina opis tekstowy za pomocą varchar(10) , pozostawiając tylko część daty:

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

Trzecia metoda wykorzystuje fakt, że datetime jest tak naprawdę liczbą zmiennoprzecinkową reprezentującą liczbę dni od 1900 r. Więc zaokrąglając ją do liczby całkowitej, na przykład za pomocą floor , masz początek dnia:

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

Aby odpowiedzieć na drugie pytanie, początek tygodnia jest trudniejsze. Jednym ze sposobów jest odjęcie dnia tygodnia:

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

Zwraca to również część czasu, więc musisz połączyć ją z jedną z metod wyznaczania czasu, aby dostać się do pierwszej daty. Na przykład z @start_of_day jako zmienna dla czytelności:

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)

Początek roku, miesiąca, godziny i minuty nadal pracuję z podejściem „różnica od 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)

Zaokrąglanie o sekundę wymaga innego podejścia, ponieważ liczba sekund od 0 daje przepełnienie. Jednym ze sposobów jest użycie początku dnia zamiast 1900 jako daty odniesienia:

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)

Aby zaokrąglić o 5 minut , dostosuj metodę zaokrąglania minut. Weź iloraz różnicy minut, na przykład używając /5*5 :

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

Działa to również przez kwadrans i pół godziny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywana procedura i uprawnienia — czy WYKONANIE wystarczy?

  2. Jak wygenerować plan wykonania w SQL Server

  3. Jak niejawne transakcje działają w SQL Server

  4. Podłączanie SQL Server do bazy danych Java

  5. jak podłączyć serwer sql za pomocą sterownika JTDS w systemie Android