2009-07-31 11 views
14

Tôi có theo T-SQL để cập nhật một bảng với dữ liệu thử nghiệm:RAND không khác nhau cho mỗi dòng trong T-SQL UPDATE

UPDATE 
SomeTable 
SET 
    Created = GETDATE () - CAST (RAND () * 365 AS int) , 
    LastUpdated = GETDATE () - CAST (RAND () * 365 AS int) 

Tôi muốn nó chọn daes ngẫu nhiên trong năm qua, không may nó sử dụng cùng một ngày cho mỗi hàng. cách tốt nhất để làm cho nó được ngẫu nhiên mỗi hàng nó cập nhật là gì?

Trả lời

32

Sử dụng RAND(CHECKSUM(NEWID()))

  • NEWID trả về một GUID
  • checksum làm cho nó int, ngẫu nhiên
  • Các hạt giống int RAND

Trong trường hợp của bạn, bạn có thể theo modulo các checkum vì checksum (NEWID()) đã là ngẫu nhiên.

CHECKSUM(NEWID()) % 365 
+2

Great stuff. Tôi tự hỏi tại sao họ làm cho nó không thay đổi mỗi hàng, nhưng câu hỏi đó là cho một ngày :) –

+2

Như một sang một bên, phương pháp của bạn không có một vấn đề: nó mang lại giá trị âm. Dễ dàng sửa chữa mặc dù: ABS (CHECKSUM (NEWID())% 365) –

+0

doh! cảm ơn. Tôi luôn luôn quên bản thân mình quá ... – gbn

3

nếu bạn chỉ muốn ngày, kể từ năm sử dụng trong quá khứ này (dựa trên câu trả lời @ gbn của):

select GETDATE () - ABS(CHECKSUM(NEWID()) % 365) 
Các vấn đề liên quan