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

Làm thế nào có thể so sánh giữa các lần trong vòng lặp while trong thủ tục được lưu trữ?

Nếu bạn muốn tạo tất cả DATETIME các giá trị trong khoảng thời gian [@StartDate, @EndDate] thì bạn có thể sử dụng bảng "kiểm đếm" :

SET NOCOUNT ON
GO
-- DROP TABLE dbo.Numbers
CREATE TABLE dbo.Numbers (
    Num INT IDENTITY(0,1), 
    CONSTRAINT PK_Numbers_Num PRIMARY KEY (Num)
);
GO
-- It generates all values from 0 to 9999
INSERT dbo.Numbers DEFAULT VALUES 
GO 10000 -- You can insert more numbers if diff. between those two date/time values is greather than 13 days (I used a frecv. of 2 minutes to computes this maximum limit)

và sau đó là một SELECT đơn giản tuyên bố

DECLARE @StartDate DATETIME2(0), @EndDate DATETIME2(0), @Frequency TINYINT
SELECT  @StartDate = '2015-04-17 11:00:00',
        @EndDate = '2015-04-17 11:15:00',
        @Frequency = 2; -- Minutes

SELECT  n.Num, 
        DATEADD(MINUTE, n.Num*@Frequency, @StartDate) AS RangeStart
        /*,
        CASE 
            WHEN DATEADD(MINUTE, (n.Num + 1)*@Frequency, @StartDate) > @EndDate
            THEN @EndDate
            ELSE DATEADD(MINUTE, (n.Num + 1)*@Frequency, @StartDate)
        END AS RangeEnd
        */
FROM    dbo.Numbers n
WHERE   n.Num <= DATEDIFF(MINUTE, @StartDate, @EndDate) / @Frequency
/*
Num         RangeStart                  RangeEnd
----------- --------------------------- ---------------------------
0           2015-04-17 11:00:00         2015-04-17 11:02:00
1           2015-04-17 11:02:00         2015-04-17 11:04:00
2           2015-04-17 11:04:00         2015-04-17 11:06:00
3           2015-04-17 11:06:00         2015-04-17 11:08:00
4           2015-04-17 11:08:00         2015-04-17 11:10:00
5           2015-04-17 11:10:00         2015-04-17 11:12:00
6           2015-04-17 11:12:00         2015-04-17 11:14:00
7           2015-04-17 11:14:00         2015-04-17 11:15:00
*/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gọi hàm C / C ++ DLL không được quản lý từ SQL Server 2008

  2. Trong đó giá trị trong cột chứa các giá trị được phân tách bằng dấu phẩy

  3. Cập nhật giá trị cột null từ giá trị không null trong hàng trước đó

  4. Làm cách nào để tôi có thể sắp xếp chung một cột 'Số phiên bản' bằng cách sử dụng truy vấn máy chủ SQL

  5. Danh sách các bảng được sử dụng trong tất cả các thủ tục được lưu trữ với tên lược đồ của SP