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

Tạo tập hợp các ngày tăng dần trong TSQL

Nếu các ngày của bạn cách nhau không quá 2047 ngày:

declare @dt datetime, @dtEnd datetime
set @dt = getdate()
set @dtEnd = dateadd(day, 100, @dt)

select dateadd(day, number, @dt)
from 
    (select number from master.dbo.spt_values
     where [type] = 'P'
    ) n
where dateadd(day, number, @dt) < @dtEnd

Tôi đã cập nhật câu trả lời của mình sau một số yêu cầu làm như vậy. Tại sao?

Câu trả lời ban đầu chứa truy vấn con

 select distinct number from master.dbo.spt_values
     where name is null

mang lại kết quả tương tự như tôi đã kiểm tra chúng trên SQL Server 2008, 2012 và 2016.

Tuy nhiên, khi tôi cố gắng phân tích mã MSSQL nội bộ khi truy vấn từ spt_values , Tôi thấy rằng SELECT câu lệnh luôn chứa mệnh đề WHERE [type]='[magic code]' .

Do đó, tôi quyết định rằng mặc dù truy vấn trả về kết quả chính xác, nhưng nó mang lại kết quả chính xác vì những lý do sai:

Có thể có một phiên bản SQL Server trong tương lai xác định một [type] khác giá trị cũng có NULL làm giá trị cho [name] , nằm ngoài phạm vi 0-2047 hoặc thậm chí không liền kề, trong trường hợp đó, kết quả sẽ đơn giản là sai.



  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ại sao UDF lại chậm hơn nhiều so với truy vấn con?

  2. Giới thiệu Tính năng mới - Báo cáo tăng trưởng cơ sở dữ liệu đám mây Spotlight

  3. Tôi muốn sử dụng câu lệnh CASE để cập nhật một số bản ghi trong máy chủ sql 2005

  4. LINQ to SQL Hãy bỏ qua nguyên nhân gây ra nhiều câu lệnh SQL

  5. DevOps:DBA hoặc Developer - Cân bằng chính xác