MSSQL에서 난수를 만들기 위해서는 rand()를 사용해서 랜덤값을 만들 수 있습니다.
1. rand()함수
MS자료를 보면 아래 같이 설명이 되어있습니다. 0부터 1까지의 의사난수 float값을 반환합니다.
테스트를 해보면 아래와 같이 0~1사이의 float 난수값을 반환 하는 부분을 확인 할 수 있습니다.
2. 숫자 랜덤데이터 만들기
1에서 100까지의 데이터를 난수데이터로 만들어 보겠습니다. rand()함수의 경우 0~1사이의 float값을 반환하기 때문에 최댓값에 곱을 한 후 1을 더하는 형태로 계산하면 됩니다.
1
2
3
4
5
6
7
8
9
|
declare @min int = 1;
declare @max int = 100;
declare @randomNum int;
set @randomNum = cast(@max * RAND() as int) + 1 ;
if @randomNum < @min
set @randomNum = @min
select @randomNum
|
cs |
3. 날짜 랜덤데이터 만들기
2023년도 날짜데이터를 임의로 가져오는 함수를 만들어 보겠습니다. 시작일~종료일까지의 날짜 차이를 구한후에 나머지 연산자를 이용하여 @randomNum값을 산정합니다. 해당값을 시작일에서 DateAdd함수를 이용하면 해당범위내의 랜덤값을 가져 올 수 있습니다.
1
2
3
4
5
6
7
8
9
|
declare @minDate date = '2023-01-01';
declare @maxDate date = '2023-12-31';
declare @diffNum int;
declare @randomNum int;
set @diffNum = DATEDIFF(d,@minDate,@maxDate)
set @randomNum = (cast(@diffNum * rand() as int) + 1) % @diffNum;
select dateadd(d,@randomNum,@minDate)
|
cs |
4. 숫자 랜덤데이터 사용자 함수 만들기
사용자 함수를 만들어서 숫자값을 편리하게 가져올 수 있도록 해보겠습니다. 위 2번항목에서 테스트한 부분을 함수로 변경해보면 아래와 같이 "함수 내에서 파생 작업을 생성하는 연산자 'rand'을(를) 잘못 사용했습니다" 라는 오류가 발생하는 부분을 확인 할 수 있습니다. 사용자 정의함수에서는 rand()함수 호출을 제한하고 있어서 해당부분을 사용을 할 수 없습니다.
이 경우에는 약간의 편법을 사용해서 처리가 가능합니다. rand()함수를 사용자함수내에 사용을 못하기 때문에 random함수를 뷰테이블로 만든후에 사용하는 방법이 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
create view vRandom
as
select rand() random
create function dbo.GetRandomInt(@min int , @max int)
returns int
as
begin
declare @randomNum int;
declare @randomData float;
select @randomData = random from dbo.vRandom
set @randomNum = @max * @randomData + 1 ;
if @randomNum < @min
set @randomNum = @min
return @randomNum
end
|
cs |
5. 날짜 랜덤데이터 사용자정의 함수 만들기
날짜 랜덤데이터를 생성해주는 사용자 함수를 만들어 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
create view vRandom
as
select rand() random
create function dbo.GetRandomDate(@minDate datetime , @maxDate datetime)
returns datetime
begin
declare @diffNum int;
declare @randomNum int;
declare @randomData float;
select @randomData = random from dbo.vRandom
set @diffNum = DATEDIFF(d,@minDate,@maxDate)
set @randomNum = (cast(@diffNum * @randomData as int) + 1) % @diffNum;
return dateadd(d,@randomNum,@minDate)
end
|
cs |
날짜랜덤값 정보가져오는 사용자 함수 호출결과 예시입니다.
Rand()함수를 사용해서 랜덤값을 만드는 방법에 대해 알아 보았습니다. 랜덤함수의 경우는 테스트 데이터를 만들때 사용하면 유용하게 사용 할 수 있습니다.
참고
https://learn.microsoft.com/ko-kr/sql/t-sql/functions/rand-transact-sql?view=sql-server-ver16
https://www.mssqltips.com/sqlservertip/3297/create-your-own-randbetween-function-in-tsql/
'프로그래밍 > DB' 카테고리의 다른 글
[DB] MSSQL 조회결과를 XML로 (for xml auto) (0) | 2023.12.20 |
---|---|
[DB] MSSQL SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결 설정오류 해결방법 (1) | 2023.11.03 |
[DB] MSSQL Group by, Group by all 사용법과 차이점 (0) | 2023.07.24 |
[DB] MSSQL 샘플DB 설치하기(AdventureWorks) (0) | 2023.07.24 |
[DB] MSSQL 2022 개발자버전 설치하기 (0) | 2023.06.15 |