RAND ve NEWID Fonksiyonları ile T-SQL'de Rasgele Sayı Oluşturma

12 Ağustos 2008, Salı, 23:20

0 Yorum RSS comment feed

RAND Fonksiyonu ile t-sql'de rasgele 0 ile 1 arası float değerler elde edebiliriz.

Print RAND()
---------------------
0.892616


RAND
fonksiyonundan üretmiş olduğumuz float değeri 1000 ile çarpıp, int'e cast ettiğimiz zaman 0-999 arası rasgele bir değer oluşacaktır.

Print CAST(RAND() * 1000 AS INT)
---------------------
893


İstersek RAND fonksiyonuna vereceğimiz bir parametre ile, bu paremetreye özel rasgele değerler oluşturabiliriz.
Aşağıdaki kod, Rand fonksiyonunu "5" parametresiyle çalıştırıyor ve her zaman aynı sonucu gösterecektir, taki parametre değişene kadar.

Print RAND(5)
---------------------
0.713667


Ancak RAND fonksiyonunu bir select sorgusu içersinde kullanma gereksinimi duyarsak, biraz amaçsız olacaktır.

SELECT TOP 10 RAND() AS RandomNumber, Title, FirstName, LastName
FROM Person.Contact

Bu durumu engellemek için NEWID Fonksiyonu kullanılabilir. NEWID, select sorgusu içersinde her çağrıldığında farklı bir GUID oluşturur. Biz bu GUID değerini önce VARBINARY'e sonrasında INT'e çevirerek rasgele bir sayı oluşturabiliriz. Ancak bu sayı negatif ve pozitif değerler içerecektir, ihtiyaca göre bu sayının mutlak değerini de ABS fonksiyonu ile alabiliriz.

SELECT TOP 10 ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS RandomNumber, Title, FirstName, LastName
FROM Person.Contact

 



İki değer arasında rasgele bir sayı oluşturmamız gerektiği zaman ise aşağıdaki fonksiyon bize yardımcı olacaktır.

DECLARE @RandomNumber float
DECLARE @RandomInteger int
DECLARE @MaxValue int
DECLARE @MinValue int 

SET @MinValue = 100
SET @MaxValue = 150 

SET @RandomNumber = RAND()
SET @RandomInteger = ((@MaxValue + 1) - @MinValue) * @RandomNumber + @MinValue 

Print @RandomNumber 
Print @RandomInteger
-------------------------------------
0.424566
121

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Programlama | T-SQL | Deneyimler & Tecrübeler
, , ,

Yorum ekle

(gözükmeyecek) (Gravatar simgenizi gösterecek)  

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.0.0 & Development by Emrah ÇETİNER