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

Nhận một giá trị ngẫu nhiên từ một phạm vi trong MS SQL?

DECLARE @t TABLE
(VALUE CHAR(3))

INSERT @t
VALUES
('000'),('002'),('005'),('190')


;WITH rnCTE
AS
(
    SELECT -1 + ROW_NUMBER() OVER (ORDER BY TYPE, number, name) AS rn
    FROM master.dbo.spt_values
)
SELECT RIGHT('000' + CAST( rn AS VARCHAR(11)),3)
FROM rnCTE
WHERE NOT EXISTS    (   SELECT 1 FROM @t 
                        WHERE VALUE = rn
                    )
AND rn < 1000

CHỈNH SỬA

Truy vấn này hoạt động bằng cách tạo danh sách đầy đủ các số có thể có từ bảng hệ thống (master.dbo.spt_values ) được đảm bảo chứa hơn 1000 hàng bên trong CTE rnCTE . -1 được thêm vào ROW_NUMBER để có các giá trị bắt đầu từ 0 thay vì 1.

Số không truy vấn bên ngoài đệm các số để hiển thị, chỉ trả về những số không có trong dữ liệu nguồn và nhỏ hơn 1000.



  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 liệt kê tất cả các ngày giữa hai ngày

  2. GROUP BY để kết hợp / nối một cột

  3. Trục động SQL cho các mục tiêu

  4. Điền không đồng bộ DataTable C #

  5. Sự cố triển khai cơ sở dữ liệu