【首先说明,编程与数据库小白,正在慢慢摸索,望高手不吝赐教】
在用oracle处理轨迹数据时,想通过select语句将坐标范围在某一点周围的记录找出来,总显示 参数超出范围,具体使用的方法如下:select * from 表1
where 2 * 6371 * ASIN(SQRT(round(SIN((34.223445-LATITUDE)*acos(-1)/360),4)+COS(34.223445*acos(-1)/180)*COS(LATITUDE*acos(-1)/180)*round(SIN((113.011235-LONGITUDE)*acos(-1)/360),4))) <0.5
说明:其中 表1 为要查找的数据记录表;34.223445,113.011235是我选定的固定点,LATITUDE和LONGITUDE分别为表中的纬度和经度值,求助大神,为什么运行不了,这样做有什么问题,应该怎么做?非常感谢
【另外说明一下,在我的表中LATITUDE和LONGITUDE字段均为VARCHAR2()格式,我试图使用to_number修改数据类型未成功,也试过通过函数来查询记录同样失败,新手小白求大神指教,程序如下:
insert into 表1(编号,X,Y) select 编号,to_number(X),to_number(Y) from user.表2;
【说明:这一句试图将表2中的X和Y转换为number型插入到新表1中,结果运行完没有任何数据;】
CREATE OR REPLACE FUNCTION GetDistance(lat1 varchar2(9),
                                       lng1 number,
                                       lat2 number,
                                       lng2 number) RETURN number is
  earth_padius number := 6378.137;
  radLat1      number := rad(lat1);
  radLat2      number := rad(lat2);
  a            number := radLat1 - radLat2;
  b            number := rad(lng1) - rad(lng2);
  s            number := 0;
begin
  s := 2 *
       Asin(Sqrt(power(sin(a / 2), 2) +
                 cos(radLat1) * cos(radLat2) * power(sin(b / 2), 2)));
  s := s * earth_padius;
  s := Round(s * 10000)/10;
  return s;end;
update GPSA set DISTANCE=distance(Y,X,34.223445,108.948301);
【说明:这一段创建函数是找的别人的代码,想通过调用函数来求出每一轨迹点与固定点的距离更新到新建的一列distance中,但运行显示调用函数时参数或类型不符】