T-SQL Rastgele Sayi Üretmek için Rand Fonksiyonunun Kullanimi
Sql Server tarafinda rastgele bir sayi üretmek istedigimiz zaman rand fonksiyonunu kullanabiliriz.
Yazim Sekli:
RAND ( [ seed ] )
Seed degiskeni int,smallint veya tinyint bir deger alir, Seed için bir deger girilmezse SQL Server rastgele bir seed degeri atar. Ayni seed degeri için SQL Database Engine her zaman ayni degeri üretir.
Dönüs Degeri:
Rand fonksiyonu float bir sayi döndürür. Bu sayi 0 ile 1 arasinda bir deger alir. Örn: 0.3231123312321 gibi
Ipucu:
Rand fonksiyonunu ard arda ayni seed degeri ile çagrilmasi sonucu hep ayni sayi olusur. Eger bir sql baglantisinda Rand fonksiyonu bir kez seed verilerek kullanilirsa, bu baglanti boyunca çalistirilacak tüm Rand fonksiyonlari sabit sonuç üretmeye baslarlar.
Örnek:
Asagidaki Örnekde 1212 seed degerini kullandigimiz üç seferdede hep ayni sonuç üretilir.
SELECT RAND(1212);
SELECT RAND(1212);
Yukarida bahsettigimiz bir kez sabit seed degeri kullanildiginda ayni baglanti boyunca seed degeri kullanilmayan Rand fonksiyonlarida her seferinde ayni degeri üretirler.
Select Rand()
Yukaridaki script sonucu Rand fonksiyonlari sirasi ile su sonuçlari verir 0.717299954493305, 0.842605911809958, 0.709172367355687, 0.771381921205242.
Script her çalistiginda yukaridaki sonuçlar degismez.
Örnek:
Asagidaki script 4 adet rastegele sayi üretir
SET @sayac = 1;
WHILE @sayac < 4
BEGIN
SELECT RAND() Rastgele_Sayi
SET @sayac = @sayac + 1
END;
Rand fonksiyonu kullanarak tam sayi üretmek:
Rand fonksiyonu 0 ile 1 arasinda float sayilar üretir. Eger siz 1,5,100 vb gibi tam sayilar üretmek istiyorsaniz rand fonksiyonu sonucu dönen degeri bir tam sayi ile çarpip int e çevirmelisiniz. Örnegin 0 ile 100 arasi bir rastgele sayi üretmek istiyorsaniz;
Rand fonksiyonunda seed degeri için getdate fonksiyonunun kullanimi
Genel olarak Rand fonksiyonunda getdate() fonksiyonu kullanilir.
.
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) );
Rand fonksiyonu kullanarak istedigimiz sayilar disinda rastgele sayi üretmek
Tablomuzda kullandigimiz bir kolonun degerini rastgele atamak istiyorsak ve kolunun degerinin unique olmasini istiyorsak, bu islem için rand fonksiyonunu asagidaki gibi kullanarabiliriz.
Sorgu
Bu örnekte 1-10 arasinda toplam 5 sayi üretecegiz. ürettigimiz sayinin bir öncekinden farkli olmasi için asagidaki yöntemi kullanacagiz.
declare @tablo table(sayi int)
set @s= 0
declare @sayac int
set @sayac = 0
while @sayac < 5
begin
while @s = 0
begin
select @s = CONVERT(INT, RAND() * 10)
if @s in (select * from @tablo)
begin
set @s=0
end
else
begin
insert into @tablo(sayi) values(@s)
set @sayac = @sayac+1
end
end
set @s=0
end
select * from @
Yukaridaki scripte while döngüsünde @sayac < 5 ifadesi @sayac < 50 yaparak 50 adet sayi üretebilirsiniz. Bu durumda select @s = CONVERT(INT, RAND() * 10) ifadesindeki 10 çarpanini 100 yaparak 0-100 arasibnda sayilar üretmeniz gerekir. Buradaki 10 çarpani kaça kadar sayi üreteceginizi belirler.