T-SQL Rastgele Sayi Üretmek

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);
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(200),Rand(),Rand()
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

DECLARE @sayac smallint;
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;

select CONVERT(int,rand()*100)

Rand fonksiyonunda seed degeri için getdate fonksiyonunun kullanimi

Genel olarak Rand fonksiyonunda getdate() fonksiyonu kullanilir.

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
      + (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 @s int
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.

.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir