MySQL에서 날짜 유효성 검사용 사용자 정의 함수 만들기
MySQL에는 날짜 유효성을 직접 확인하는 전용 내장 함수가 없기 때문에, 사용자 정의 함수(Stored Function)를 직접 만들어 검사할 수 있습니다. 아래 예제에서는 입력된 값이 실제 유효한 날짜인지 판별하여, 유효하면 1, 그렇지 않으면 0을 반환하는 함수를 작성합니다.
먼저 이진 로깅(binlog)이 활성화된 환경에서 함수 생성을 허용하도록 log_bin_trust_function_creators 시스템 변수를 설정합니다. 이후 구분자(delimiter)를 변경한 뒤 함수를 생성합니다.
mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.03 sec)
mysql> delimiter //
mysql> create function isValidDate(actualDate varchar(255)) returns int
-> begin
-> declare flag int;
-> if (select length(date(actualDate)) IS NOT NULL ) then
-> set flag = 1;
-> else
-> set flag = 0;
-> end if;
-> return flag;
-> end
-> //
Query OK, 0 rows affected (0.11 sec)
mysql> delimiter ;
함수의 동작 원리
이 함수는 전달받은 값을 DATE() 함수로 변환해 봅니다. 변환 결과가 NULL이 아니면 유효한 날짜로 판단하여 1을 반환하고, NULL이면 잘못된 값으로 판단하여 0을 반환합니다.
사례 1 − 매개변수가 NULL인 경우
검사하려는 값이 실제 날짜가 아닌 경우입니다. SELECT 문으로 함수를 호출해 보겠습니다.
mysql> select isValidDate(NULL);
실행 결과 0이 출력되며, 이는 유효한 날짜가 아니라는 의미입니다.
+-------------------+
| isValidDate(NULL) |
+-------------------+
| 0 |
+-------------------+
1 row in set (0.05 sec)
사례 2 − 매개변수가 실제 날짜 값인 경우
이번에는 유효한 날짜 값을 전달해 보겠습니다.
mysql> select isValidDate('2019-10-21');실행 결과 1이 출력되며, 이는 실제 유효한 날짜라는 의미입니다.
+---------------------------+
| isValidDate('2019-10-21') |
+---------------------------+
| 1 |
+---------------------------+
1 row in set (0.00 sec)