먼저 함수를 하나 등록한다. 그대로 복사해서 사용해도 됨.
DELIMITER // CREATE FUNCTION `GetDistance`( lat1 numeric (9,6), lon1 numeric (9,6), lat2 numeric (9,6), lon2 numeric (9,6) ) RETURNS decimal(10,5) READS SQL DATA BEGIN DECLARE x decimal (20,10); DECLARE pi decimal (21,20); SET pi = 3.14159265358979323846; SET x = sin( lat1 * pi/180 ) * sin( lat2 * pi/180 ) + cos( lat1 *pi/180 ) * cos( lat2 * pi/180 ) * cos( abs( (lon2 * pi/180) - (lon1 *pi/180) ) ); SET x = acos( x ); RETURN ( 1.852 * 60.0 * ((x/pi)*180) ) / 1.609344; END // DELIMITER ; |
사용 예제 쿼리
select SHOP_NAME, addr1, addr2, addr3, GetDistance(내위치Lat, 내위치Lng, a.lat, a.lng) as Distance from SHOP_TABLE a where lat != '' and lng != '' order by Distance ASC |
tip.
위 쿼리를 날리면 distance는 Miles 단위로 나온다.
//마일을 받아 킬로미터 또는 미터로 반환 public String milesToKm(float miles) { String returnStr = null; float kilometers = (float) (miles*1.609344); returnStr = Float.toString(kilometers); if(returnStr.length()>0 && returnStr.substring(0,1).equals("0")) { float km = Float.parseFloat(returnStr); km = km*1000; returnStr = Float.toString(km); return returnStr + "m"; } else { return returnStr + "Km"; } } |
'Develop > SQL' 카테고리의 다른 글
간단한 DB 연결 테스트 JSP 파일 (2) | 2012.04.12 |
---|---|
Spring + Ibatis MSSQL 2008 연동 (0) | 2012.04.05 |
윈7 64bit 에 toad 및 oracle 10g 셋팅하기 100% (0) | 2012.03.09 |
MySql - replace into 및 DUPLICATE 기능 (0) | 2011.06.08 |
mysql 외부에서 접속허용하기 (0) | 2011.05.21 |
Tomcat + (Oracle or Mysql) + ibatis framework JNDI 설정 (0) | 2011.04.20 |
Navicat 8 for MySQL 백업하기 & 백업파일 적용하기 (0) | 2011.04.10 |
[MySql] 나비켓(Navicat 8) 사용하여 우편번호 DB에 밀어 넣기 (0) | 2011.04.01 |