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

Tạo thời gian ngẫu nhiên riêng biệt trong khoảng thời gian cố định

Sự cố OP đã có trong khi chỉ sử dụng rand() là do nó được đánh giá một lần cho mỗi truy vấn .

Từ tài liệu :

Phương pháp tiếp cận được mô tả bên dưới sẽ xóa tối ưu hóa và ngăn chặn hành vi này, vì vậy rand() được đánh giá một lần trên mỗi hàng :

dateadd( second
       , rand(cast(newid() as varbinary)) * 43200
       , cast('08:00:00' as time) )
  • newid() tạo giá trị duy nhất của loại uniqueidentifier ;
  • giá trị được chuyển đổi với cast được sử dụng làm hạt giống trong rand([seed]) hàm tạo float giả ngẫu nhiên giá trị từ 0 đến 1 và với tư cách là hạt giống luôn là duy nhất, giá trị trả về cũng là duy nhất.

SQLFiddle



  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ó phải mọi người đều đang di chuyển đến đám mây?

  2. EF4 - Thủ tục được lưu trữ đã chọn trả về không có cột nào

  3. Cột xung đột với loại cột khác trong danh sách bỏ chia

  4. Thủ tục được lưu trữ hoạt động khi chạy thủ công, không chạy từ tác nhân máy chủ sql

  5. Làm cách nào để kết hợp dữ liệu từ nhiều hàng thành một?