Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách tốt nhất để cắt bớt ngày trong SQL Server là gì?

Để làm tròn đến cả ngày gần nhất , có ba cách tiếp cận đang được sử dụng rộng rãi. Cái đầu tiên sử dụng datediff để tìm số ngày kể từ 0 ngày giờ. 0 datetime tương ứng với ngày 1 tháng 1 năm 1900. Bằng cách thêm chênh lệch ngày vào ngày bắt đầu, bạn đã làm tròn thành một ngày;

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

Phương pháp thứ hai là dựa trên văn bản:nó cắt ngắn mô tả văn bản bằng varchar(10) , chỉ để lại phần ngày:

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

Phương pháp thứ ba sử dụng thực tế là datetime thực sự là một dấu phẩy động đại diện cho số ngày kể từ năm 1900. Vì vậy, bằng cách làm tròn nó thành một số nguyên, ví dụ:sử dụng floor , bạn bắt đầu một ngày mới:

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

Để trả lời câu hỏi thứ hai của bạn, đầu tuần phức tạp hơn. Một cách là trừ ngày trong tuần:

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

Điều này cũng trả về một phần thời gian, vì vậy bạn phải kết hợp nó với một trong các phương pháp rút ngắn thời gian để đến ngày đầu tiên. Ví dụ:với @start_of_day như một biến để dễ đọc:

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)

Đầu năm, tháng, giờ và phút vẫn hoạt động với phương pháp tiếp cận "sự khác biệt kể từ năm 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)

Làm tròn theo giây yêu cầu một cách tiếp cận khác, vì số giây kể từ 0 cung cấp cho một tràn. Một cách khác là sử dụng ngày bắt đầu, thay vì năm 1900, làm ngày tham chiếu:

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)

Để làm tròn 5 phút , điều chỉnh phương pháp làm tròn phút. Lấy thương số của chênh lệch phút, ví dụ:sử dụng /5*5 :

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

Điều này cũng hoạt động trong một phần tư tiếng rưỡi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kiểm tra cài đặt ANSI_NULLS của phiên trong SQL Server

  2. Xác định mối quan hệ một-một trong SQL Server

  3. Sử dụng COL_LENGTH () để lấy độ dài của cột trong SQL Server

  4. Tìm các đối tượng được tham chiếu trong SQL Server:sys.dm_sql_referenced_entities

  5. ON [PRIMARY] có nghĩa là gì?