RANDBETWEEN 함수 만들기
- Version : SQL Server 2005, 2008, 2008R2, 2012, 2014
엑셀에 포함되어 있는 함수인 RANDBETWEEN(범위 난수 발생)을 SQL에서 구현하는 방법에 대해서 알아 본다.
엑셀에서는 다음과 같이 RANDBETWEEN 함수를 사용하여 범위에 포함되어 있는 난수를 생성하는 함수가 있다.
SQL Server에서도 RAND() 함수를 사용하여 두 수 사이의 난수를 생성할 수 있다.
select cast(round((75-25)*rand()+25, 0) as integer) as RandBetweenValue |
위의 쿼리를 원하는 범위에 따라 재사용이 가능하도록 함수를 생성한다. 다음과 같은 오류가 발생 할 것이다.
create function randbetween(@bottom int, @top int) returns int
as
begin return (select cast(round((@top-bottom)*rand() + @bottom,0) as integer)) end go |
이 문제는 임의의 숫자를 포함하는 뷰를 사용하면 해결할 수 있다.
create view vRandomNumber as select rand() as RandomNumber go
create function randbetween(@bottom int, @top int) returns int
as
begin return (select cast(round((@top-@bottom)* RandomNumber + @bottom,0) as integer) from vRandomNumber) end go
select dbo.randbetween(25, 75) |
함수에서 사용할 수 없는 오퍼레이터를 뷰로 해결하여 사용자가 원하는 범위 내애서 난수를 발생시키는 방법에 대해서 알아 보았다.
[참고자료]
http://www.mssqltips.com/sqlservertip/3297/create-your-own-randbetween-function-in-tsql/
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp