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

T-SQL дата и час, закръглен до най-близката минута и най-близките часове с използване на функции

declare @dt datetime

set @dt = '09-22-2007 15:07:38.850'

select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)

ще се върне

2007-09-22 15:07:00.000
2007-09-22 15:00:00.000

Посоченото по-горе просто съкращава секундите и минутите, произвеждайки резултатите, поискани във въпроса. Както @OMG Ponies посочи, ако искате да закръглите нагоре/надолу, тогава можете да добавите половин минута или половин час съответно, след което да съкратите:

select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)

и ще получите:

2007-09-22 15:08:00.000
2007-09-22 15:00:00.000

Преди да бъде добавен типът данни за дата в SQL Server 2008, бих използвал горния метод, за да съкратя частта от време от дата и час, за да получа само датата. Идеята е да се определи броят на дните между въпросната дата и час и фиксиран момент във времето (0 , което имплицитно прехвърля към 1900-01-01 00:00:00.000 ):

declare @days int
set @days = datediff(day, 0, @dt)

и след това добавете този брой дни към фиксирания момент във времето, което ви дава оригиналната дата с времето, зададено на 00:00:00.000 :

select dateadd(day, @days, 0)

или по-накратко:

select dateadd(day, datediff(day, 0, @dt), 0)

Използване на различна част от датата (напр. hour , mi ) ще работи съответно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете дати от номер на седмица в T-SQL

  2. 5 начина да получите краткото име на месеца от дата в SQL Server

  3. Създаване на тригери за одит в SQL Server

  4. Инкрементът на идентичността на колоната на SQL Server 2012 скача от 6 на 1000+ при 7-ми запис

  5. Преобразувайте заявката на SQL Server в MySQL