昨天在网上搜了一些城市的经纬度非完整资料,想把他们添加到oracle中,折腾了半天终于完成了。无奈下班时把 pl/sql developer 关掉时没保存sql 代码。那个郁闷啊......今天就不重写昨天的内容了。
简要的阐述一下过程吧:
1 导入数据
网上搜到的资料就是一个普通的文本,想要弄到数据库中,要么通过一条一条对应手工录入,要么通过什么导入吧,比如excel 什么的。结果还真有方法 把文本copy 到excel 中数据成了一行一行的"结构化数据"了,然后把表打开成编辑状态点击相应表头,这样就选择了这一整列,然后粘贴,搞定。
2 调整数据
copy 进来的数据因为城市顺序与数据库中的城市顺序不一致所以还的调整。 数据格式形如形如 "牡丹江 129.34 44.35";
思路很简单 如果名字相配则切割字符串后update.
写一个测试sql , 列des中正是保存 copy 进去的数据。
update (select m.cityid ,m.des from s_city m join s_city s on m.cityname = substr( s.des,1, instr(s.des,' ',1)-1)|| '市')
t set t.des = t.des;
执行错误,错误信息"无法保存非键值保存表对应的列"。添加主键后还是错误,并且 select 出来的结果集也没有重复数据。无语了,不知道什么原因。
通过一条语句实现有障碍,就两条吧经度纬度分别update。最终搞定。
今天的内容:
获得弧度的函数。
CREATE OR REPLACE FUNCTION RAD(d number) RETURN NUMBER
is
PI number :=3.141592625;
begin
return d* PI/180.0;
end ;
select RAD(360) from dual;
根据经纬度计算距离。
CREATE OR REPLACE FUNCTION GetDistance(lat1 number,
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) / 10000;
return s;
end;
--根据城市名计算距离
CREATE OR REPLACE FUNCTION GetDisByCityName(str1 varchar2, str2 varchar2)
return number is
lat1 number := 0;
lng1 number := 0;
lat2 number := 0;
lng2 number := 0;
begin
select longitude into lat1 from s_city where cityname=str1 ;
select dimensionality into lng1 from s_city where cityname=str1;
select longitude into lat2 from s_city where cityname=str2;
select dimensionality into lng2 from s_city where cityname=str2;
return GetDistance(lat1 ,lng1 ,lat2 , lng2 );
end;
--select GetDisByCityName('长沙市','南昌市')from dual;
结果 258.6275
分享到:
相关推荐
oracle-sql脚本,省份城市经纬度sql脚本,亲测,可用,主要包含全国各个省份和城市的经纬度
ORACLE 获取数据,根据定位的数据,计算用户的经纬度
OracleGrid computing 英文版 oracle Grid 分布式计算
在oracle中利用函数实现计算公式解析|在oracle中利用函数实现计算公式解析
oracle根据生日自动求年龄的函数源代码,无须创建任何其他表
通过入参 生日 ,计算日期(默认sysdate),计算年龄 精确到秒
* 在 Oracle 数据库中,我们可以根据考核规则来计算学生的成绩。例如,根据测试成绩、考勤和作业完成率来计算总成绩。 8. 数据库开发培训 * Oracle 数据库开发培训是指使用 Oracle 数据库来开发应用程序的培训。...
Oracle 直方图计算公式,对于Oracle cbo优化器的探究又进入一步
Oracle数据库的周数计算 日期计算,算第n周的第一天及最后一天是几号。 公式...
在echarts2的地图展示中,国内的地级市不全,现在整理了全国所有地级市的坐标值,并导出Oracle的sql数据库导入格式,方便大家使用。
在实际工作中经常遇到截取两个相同字符串之间的字符的oracle问题,以下是相关语句
在使用 OLEDB 连接 Oracle 数据库时,需要安装 Oracle 数据访问组件 (ODAC--Oracle Data Access Components),其中包括 Oracle Provider for OLEDB。这是因为 OraOLEDB.Oracle 提供程序是 Oracle 的一部分,需要单独...
Oracle 查询两个日期之间的所有月份
Oracle_Spatial空间数据库设计的打包资料,课程设计用,GIS专业的一定要看。
使用oracle ,计算系统当前时间的毫秒数
NULL 博文链接:https://fanshuyao.iteye.com/blog/2341163
GCJ经纬度(腾讯、高德)转WGS84经纬度EXCEL算法,亲自用过好用!
通过使用oracle 的空间函数,来计算出用户点和和设备(线对象或点对象)之间的距离。已写为存储过程,参数:一个点坐标,一个设备表名,一个设备id
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
Understanding Oracle Certification Support Licensing VMware environments