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

Làm thế nào để lấy ngày đầu tiên và ngày cuối cùng của năm hiện tại?

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

Truy vấn trên cung cấp giá trị ngày giờ cho nửa đêm đầu ngày 31 tháng 12. Đây là khoảng thời gian ngắn hơn 24 giờ so với thời điểm cuối cùng trong năm. Nếu bạn muốn bao gồm thời gian có thể xảy ra vào ngày 31 tháng 12, thì bạn nên so sánh với ngày đầu tiên của năm tiếp theo, với < sự so sánh. Hoặc bạn có thể so sánh với vài mili giây cuối cùng của năm hiện tại, nhưng điều này vẫn để lại khoảng cách nếu bạn đang sử dụng thứ gì đó không phải DATETIME (chẳng hạn như DATETIME2):

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
   DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear

Các khoảng thời gian khác

Cách tiếp cận này có hai khía cạnh tốt:hiệu suất tốt và nó có thể dễ dàng thay đổi cho các khoảng thời gian khác bằng cách thay thế cả hai lần xuất hiện của yy (=year) với một chuỗi khác:

yy, yyyy    year
qq, q       quarter
mm, m       month
wk, ww      week 

(Hãy cẩn thận với các tuần:ngày bắt đầu phụ thuộc vào cài đặt máy chủ.)

Chi tiết kỹ thuật

Điều này hoạt động bằng cách tìm ra số năm kể từ năm 1900 với DATEDIFF(yy, 0, GETDATE()) và sau đó thêm ngày đó vào ngày không =ngày 1 tháng 1 năm 1900. Có thể thay đổi điều này để hoạt động cho một ngày tùy ý bằng cách thay thế GETDATE() một phần hoặc một năm tùy ý bằng cách thay thế DATEDIFF(...) chức năng với "Năm - 1900."

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hành vi nối nvarchar / chỉ mục / nvarchar (tối đa) không thể giải thích được

  2. Giá trị rõ ràng cho cột nhận dạng trong bảng chỉ có thể được chỉ định khi danh sách cột được sử dụng và IDENTITY_INSERT BẬT SQL Server

  3. Thống kê cơ sở dữ liệu cập nhật máy chủ SQL

  4. Hiểu hàm PIVOT trong T-SQL

  5. Cách nhận các giá trị không chứa số trong SQL Server