這工作正常。如果我更改@unit_type變量。計算中出現正確的單位類型。MySQL CASE不能在存儲過程中工作
set @unit_type = 'kilometers';
set @lat = 50;
set @lon = 100;
set @lat2 = 51;
set @lon2 = 101;
select
(CASE @unit_type
WHEN 'feet' THEN 20000000
WHEN 'miles' THEN 3696.1
WHEN 'meters' THEN 6979100
WHEN 'kilometers' THEN 6979
END
* acos(cos(radians(@lat))
* cos(radians(@lat2))
* cos(radians(@lon2)
- radians(@lon))
+ sin(radians(@lat))
* sin(radians(@lat2))
)) AS distance;
但是,這並不是。當我嘗試運行這個存儲過程時,它每次都會以公里爲單位返回。如果我刪除公里的情況下,結果爲空。
CREATE PROCEDURE `anotherTest`(IN `lat` BIGINT, IN `lon` BIGINT, IN `lat2` BIGINT, IN `lon2` BIGINT, IN `unit_type` TEXT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select
(CASE @unit_type
WHEN 'feet' THEN 20000000
WHEN 'miles' THEN 3696.1
WHEN 'meters' THEN 6979100
WHEN 'kilometers' THEN 6979
END
* acos(cos(radians(@lat))
* cos(radians(@lat2))
* cos(radians(@lon2)
- radians(@lon))
+ sin(radians(@lat))
* sin(radians(@lat2))
)) AS distance;
END
我只是想明白這是爲什麼,以及如何更好地寫出來解決這個問題。
任何人有任何想法?提前致謝。
更新:
解決的辦法是從我的程序的SELECT語句中刪除@的。因爲它們不需要訪問參數。
CREATE PROCEDURE `anotherTest`(IN `lat` BIGINT, IN `lon` BIGINT, IN `lat2` BIGINT, IN `lon2` BIGINT, IN `unit_type` TEXT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select
(CASE unit_type
WHEN 'feet' THEN 20000000
WHEN 'miles' THEN 3696.1
WHEN 'meters' THEN 6979100
WHEN 'kilometers' THEN 6979
END
* acos(cos(radians(lat))
* cos(radians(lat2))
* cos(radians(lon2)
- radians(lon))
+ sin(radians(lat))
* sin(radians(lat2))
)) AS distance;
END
原來的基礎上,你告訴我在這裏,我所要做的就是刪除@的距離,我試圖從我的發言中調用的參數。 – Knight