Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Кой е най-добрият начин за съкращаване на дата в SQL Server?

За закръгляване до най-близкия цял ден , има три широко използвани подхода. Първият използва datediff за да намерите броя дни след 0 Време за среща. 0 datetime съответства на 1 януари 1900 г. Като добавите дневната разлика към началната дата, вие закръглите до цял ден;

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

Вторият метод е базиран на текст:съкращава текстовото описание с varchar(10) , оставяйки само частта за дата:

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

Третият метод използва факта, че datetime е наистина плаваща запетая, представляваща броя на дните от 1900 г. Така че като го закръглите до цяло число, например като използвате floor , получавате началото на деня:

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

За да отговоря на втория си въпрос, началото на седмицата е по-сложно. Един от начините е да извадите деня от седмицата:

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

Това връща и част от времето, така че ще трябва да я комбинирате с един от методите за премахване на времето, за да стигнете до първата среща. Например с @start_of_day като променлива за четливост:

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)

Началото на годината, месец, час и минута все още работи с подхода „разлика от 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)

Закръгляване по секунда изисква различен подход, тъй като броят на секундите след 0 дава преливане. Един от начините да заобиколите това е да използвате началото на деня, вместо 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)

Закръглите с 5 минути , настройте метода на закръгляване на минутите. Вземете частното от минутата разлика, например като използвате /5*5 :

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

Това работи и за четвърт час и половина.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Времето за изчакване на заявката на SQL Server зависи от клаузата Where

  2. Как да създадете база данни в SQL Server

  3. Как да заявя стойности от xml възли?

  4. LEFT() срещу SUBSTRING() в SQL Server:Каква е разликата?

  5. SQL Server Конвертиране на Varchar в Datetime