this discussion을 기반으로하는 두 좌표 간 거리에 대한 몇 가지 계산과 함께 기본 쿼리가 있습니다. 독립 실행 형 쿼리로 실행하는 것처럼 보이지만 저장 함수로 실행하려고하면 이상한 결과 (일반적으로 null 또는 99.9999 ...)가 반환됩니다.MySQL이 함수를 저장하지 못했지만 독립 실행 형 쿼리로 작동
독립 쿼리는 다음과 같습니다
SELECT lat, lng,
(6371 * acos(cos(radians(32.113277)) * cos(radians(lat))
* cos(radians(lng) - radians(34.799259)) + sin(radians(32.113277))
* sin(radians(lat)))) AS distance_km,
(6371000 * acos(cos(radians(32.113277)) * cos(radians(lat))
* cos(radians(lng) - radians(34.799259)) + sin(radians(32.113277))
* sin(radians(lat)))) AS distance_meters
FROM (
SELECT 32.113391 as lat , 34.801571 as lng
) a
이 ^이 잘 실행됩니다. I 심지어 위해 (모든 입력 값 으려고
select distance_meters(32.113277, 34.799259, 32.113391, 34.801571)
가
99.999999 결과
:create function distance_meters(lat1 decimal(8,6), lng1 decimal(8,6), lat2 decimal(8,6), lng2 decimal(8,6))
returns decimal(8,6) DETERMINISTIC
return (6371000 * acos(cos(radians(lat1)) * cos(radians(lat2))
* cos(radians(lng2) - radians(lng1)) + sin(radians(lat2))
* sin(radians(lat2))))
이처럼 실행 : 다음 저장 기능으로 변경하려고 좌표)를 다음과 같이 저장 함수의 코드의 일부로 나타냅니다.
create function distance_meters()
returns decimal(8,6) DETERMINISTIC
return (6371000 * acos(cos(radians(32.113277)) * cos(radians(32.113391))
* cos(radians(34.801571) - radians(34.799259)) + sin(radians(32.113277))
* sin(radians(32.113391))));
전혀 문제가되는 결과!
추신 : 물론 나는 그것을 다시 만들기 전에 매번 함수를 삭제했습니다. 또한 반환 형식을 십진수에서 숫자로 변경하려고했습니다.
편집 :
DELIMITER $
create function distance_meters()
returns decimal(8,6) DETERMINISTIC
begin
declare var_name decimal(8,6);
set var_name = (6371000 * acos(cos(radians(32.113277)) * cos(radians(32.113391))
* cos(radians(34.801571) - radians(34.799259)) + sin(radians(32.113277))
* sin(radians(32.113391))));
return var_name;
end$
DELIMITER ;
select distance_meters()
내가 여기서 무엇을 놓치고 : 코멘트에 제안, 나는이 시도했다?
어둠 속에서 촬영되었지만 BEGIN END 섹션을 사용하여 10 진수 변수를 선언하고 쿼리 결과에 SET하고 반환하십시오. 변경 사항이 있습니까? – Mihai
@ 미하이 감사합니다,하지만 불행히도 도움이되지 않았습니다 - 질문의 업데이트 된 (아래 부분) 버전을 참조하십시오. –
십진수 정밀도를 높이면 어떻게됩니까? 너 (18,6) 시도해 주시겠습니까? –