문제

MySQL에 저장된 기능이 있습니다.

CREATE FUNCTION `login_count`(o INT, start_date DATE, end_date DATE) RETURNS INT
READS SQL DATA
BEGIN
DECLARE total_count INT;
SELECT COUNT(*) INTO total_count FROM logins as l WHERE `order_id` = o && modified BETWEEN start_date AND end_date; 
RETURN total_count; 
END

매우 기본적으로, ID, 시작 날짜 및 종료 날짜를 취하고 해당 날짜 범위의 로그인 수를 반환합니다. 내가 실행할 때마다 0이됩니다. WHERE 절의 날짜 섹션을 제거하지 않는 한. 그런 다음 실제 숫자를 반환합니다. 또는 저장된 기능에 날짜를 수동으로 넣으면 날짜 문제가 아니라 매개 변수 목록을 통해 날짜를 제공 할 때만 마음에 들지 않습니다.

이런 일이 일어날 것이라고 생각하는 생각이 있습니까? 내가 수동으로 날짜를 저장된 기능에 넣을 수 있다는 사실은 실제로 저를 버그로 만듭니다. 여기에서 많은 일이 일어나지 않는 것과는 달리 엉망이 될 수 있으므로 다음에 무엇을 시도 해야하는지 잃어 버렸습니다.

또한 저장된 기능/절차를 디버그하는 방법이 있습니까? 나는 단지 0을 되찾고 있지만, 무슨 일이 일어나고 있는지 알아 내기 위해 이것을 디버깅 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

첫 번째 추측은 MySQL이 인식하지 못하는 형식으로 날짜를 제공하고 있다는 것입니다. MySQL은 날짜 리터럴 형식에 대해 꽤 까다 롭습니다. yyyy-mm-dd, yy-mm-dd, yyyymmdd 또는 yymmdd를 원합니다 (대시 대신 다른 구두점 문자를 사용할 수도 있습니다). 보다 DateTime, 날짜 및 타임 스탬프 유형 자세한 사항은.

더 많은 날짜 형식을 MySQL에 인정 된 형식으로 변환 할 수도 있습니다. str_to_date () 기능.

저장된 프로 시저 및 저장된 기능과 관련하여 언제든지 사용자 정의 변수를 설정할 수 있습니다. @ 접두사 및이 변수는 저장된 기능이 반환 된 후 전역적으로 사용할 수 있습니다. 부작용처럼. 따라서 저장된 기능을 실행하는 동안 진단 정보를 설정하는 데 사용한 다음 나중에 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top