tip #2: ساخت یک عدد رندم در SQL

من می‌خواستم یک سری عدد رندم بین ۰ تا ۳۶۰ رو داخل یکی از فیلدهای یک جدولم در دیتابیس قرار بدم.

SQL یک تایع RAND دارد که یک عدد رندم بین صفر تا یک تولید می‌کند. اما وقتی در Select از آن استفاده می‌کنیم برای همه رکوردها عدد مشابه تولید می‌کند.

Select Rand() As RandomNumber
From   (Select 1 As NUM Union All
        Select 2 Union All
        Select 3) As Alias

مثال بالا اعدادی  مشابه زیر تولید می‌کند:

RandomNumber
----------------------
0.920057583532051
0.920057583532051
0.920057583532051

 

پس خیلی برای مورد من کاربرد ندارد (البته که کاربرد خودش رو دارد). بر اساس این مطلب (SQL Server - Set based random numbers) به دستور زیر رسیدم که بسیار کار راه‌انداز است. شما هم اگر خواستید برای یک فیلد یک سری اعداد رندم ایجاد کنید می‌توانید از این روش استفاده کنید:

ABS(CHECKSUM(NewId())) % 360

این دستور اعداد رندمی بین ۰ تا ۳۵۹ تولید می‌کند و حتی در دستور Select هم به ازای هر رکورد یک مقدار متفاوت تولید می‌کند.

پر واضح است که عدد ۳۶۰ را باید متناسب با نیاز خود تغییر دهید. ;-)

ارسال نظر