Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 사용자 정의 함수로 날짜 유효성 검사하기

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)