먼저 알아야 할 것은 날짜 및 랜덤 관련 함수입니다.
UNIX_TIMESTAMP() 함수를 이용해 Timestamp를 구할 수 있죠?
아래의 예를 보세요.
SELECT UNIX_TIMESTAMP('2010-01-01 00:00:00');
UNIX_TIMESTAMP('2010-01-01 00:00:00') |
1262271600 |
SELECT UNIX_TIMESTAMP('2010-02-04 00:00:00'); // 1초 더함. 이유는 아래
UNIX_TIMESTAMP('2010-02-04 00:00:00') |
1265209200 |
저 수치 사이의 값을 구하면 되겠죠?
이때 필요한 것이 RAND() 함수입니다.
이 함수로 0 이상, 1 미만의 부동 소수점 값을 구할 수있습니다. (0 ≤ n < 1) 이유!
SELECT RAND();
RAND() |
0.298790559450901 |
정수 형태로 하려면 FLOOR() 함수를 사용해주면 됩니다.
예를 들어 1 이상 10 미만의 정수를 반환받고자 한다면 아래처럼 하면 됩니다.
SELECT FLOOR(1+RAND()*(10-1));
FLOOR(1+RAND()*(10-1)) |
3 |
지금까지의 함수를 통해 두 값 사이의 임의의 수(Timestamp)를 생성할 수 있겠죠?
그렇게 생성된 Timestamp 값을 FROM_UNIXTIME() 함수를 이용해 '년-월-일 시:분:초' 형태로 구할 수 있습니다.
최종적으로 아래 명령으로 구할 수 있습니다.
SELECT FROM_UNIXTIME(FLOOR(unix_timestamp('2010-01-01 00:00:00')+(RAND()*(unix_timestamp('2010-02-04 00:00:00')-unix_timestamp('2010-01-01 00:00:00')))));
FROM_UNIXTIME(FLOOR(unix_timestamp('2010-01-01 00:00:00')+(RAND()*(unix_timestamp('2010-02-04 00:00:00')-unix_timestamp('2010-01-01 00:00:00'))))) |
2010-01-21 23:37:01 |
Timestamp값을 그대로 넣으려면 FROM_UNIXTIME() 함수가 필요없겠죠?
년-월-일 또는 시간 등 필요한 문장으로 입력하려면 DATE_FORMAT() 함수를 사용하면 됩니다.