概述
ArcGIS 中的属性查询表达式符合数据库的 SQL表达式语法及规范,这里主要是WHERE 子句的使用,但使用不同存储类型的数据源,SQL语法也不完全相同,如果是MDB格式地理数据库,SQL的使用语法就是Access的语法;如果数据存储是Oracle数据库,则就是Oracle的语法。在ArcGIS下常用SQL语法如表11-1所列。
表11-1 SQL的常用语法
类型 | 字符串 | 空的判断 | 模糊查询 |
SHP | 单引号 | 字符是=”, 数字是=0 | _(下划线)表示1位,%表示多位 |
个人数据库(Mdb) | 单双引号都可以 | is Null | ?表示1位,*表示多位 |
文件数据库(gdb) | 单引号 | is null | _表示1位,%表示多位 |
Oracle | 单引号 | is Null | _表示1位,%表示多位 |
Sql server | 单引号 | is Null | _表示1位,%表示多位 |
总结:字符串查询方法,一般用单引号;数字如整数,双精度,不加引号;字段名通常什么也不用加,不需要引号和中括号;对于特殊查询,如查询“北大”(北京大学),输入的查询值应该为:MDB格式数据'北*大*',其他格式'北%大%';字符串模糊查询使用“Like”关键字,同时加通配符,通配符除在mdb中是“*”外(如果使用C# ArcEngine开发,程序源代码中也使用“%”,而不是“*”),其他都是百分号“%”。精确查询使用“=”号。另外,SQL中不区分大小写,如null和NULL,是完全一样的,SHP文件不支持NULL。
查询中的“and” 是并且、逻辑“与”的含义,要同时满足两个查询条件,查询结果更少;而关键字“or”是或者、逻辑“或”的含义,查询结果一般比单条件查询结果更多。
数字不能直接模糊查询,处理思路是将该数字转换为字符串,转换语句如下(FID,OBJECTID是数字)表11-2所列。
表11-2数字模糊查询
类型 | 模糊查询 |
SHP | cast(FID as character) like '%1%' |
gdb | cast(OBJECTID AS varchar(20)) like '%1%' |
mdb | str( OBJECTID ) like '*1*' |
oracle | OBJECTID like ‘%1%’ |
Sql server | str(OBJECTID) like ‘%1%’ |
如果要查询个人地理数据库数据,可以将字段名称用方括号括起:如[AREA],对于文件地理数据库数据和SHP,您可以将字段名称用双引号括起,"AREA",但是通常不需要。如直接AREA,所以字段名通常什么也不加。
查询时,数字可以使用“大于,小于或等于”运算符,对于字符型也可以使用“大于,小于或等于”运算符,字符型结果按ABC字母顺序从小到大排序,数字在字母之前。如果含有a,b,A,B大小写字母,按aAbB顺序从小到大排序。汉字也可以进行大小比较,ArcGIS下是按汉字的拼音顺序,对于多音字,情况有点复杂,如汉字“长”可能的拼音是“chang”,也可能是“zhang”,默认排序是按“chang”使用,重发音可以“zhong,chong”,此时排序按“zhong”,因为“zhong”是最常用的。
对于特殊字符的查询,在GDB、 SHP、Oracle、SQL Server下查询含下划线“_”和“%”等特殊字符的查询(XMMC是字段名),查询方法如下:
XMMCLIKE '%_%' escape '' ---查询含下划线_的
XMMC LIKE'%%%' escape '' ---查询含百分号%的
Acessmdb中*和?的查询
XMMC LIKE '*[*]*'---查询含*的
XMMC LIKE '*[?]*'---查询含?的
属性查询的四种方法:
1. 主菜单下“选择”菜单→“按属性选择”,该选择功能只能是针对要素图层,且查询的图层必须加载到ArcMap地图窗口,查询后ArcMap地图窗口自动选择查询结果要素对象,该属性查询操作界面如图11-1所示。
2. 工具箱中“按属性选择图层(SelectLayerByAttribute)”工具。使用该工具时输入数据可以是要素图层或表,但必须加到ArcMap的地图窗口,查询后自动选择满足查询条件的要素对象;
3. 工具箱中“筛选(Select)”工具。该工具的输入必须是是要素类或要素图层,查询输出结果是要素;
4. 使用工具箱中“表筛选(Table Select)”工具,该工具的输入可以是要素类或表,但该工具的查询输出结果只能是表;
图11-1 属性查询界面
图11-1中,上面的图层列表中选择查询图层,在字段列表框中双击字段,字段名进入SQL查询输入框,单击“获得唯一值”按钮可获得选中字段的唯一值(字段值相同的只返回一个)。当查询出现SQL语法错误,一个重要的方法:编辑框中的脚本拷贝到记事本中,仔细查看、分析,主要:字符是否加引号、引号是否半角、引号是否单引号、数字不加引号等等。
例1获得等高线计曲线
数据:“chp11dgx.SHP”,其中的高程字段是“BSGC”,且该等高线的等高距是20米,是100的倍数就是计曲线,如图11-2所示。
图11-2 获得等高线计曲线查询
不同的数据源,SQL语句不太一样,如果SHP文件格式或者是GDB格式(个人地理数据库格式),查询的语句是:“round(BSGC/100,0)*100=BSGC”, “round”是四舍五入取位函数,其中的0是取整数;如果数据是MDB格式,则查询的语句是:“int(BSGC/100)*100= BSGC”,“int”取整函数。
类似的查询操作,在SHP文件格式中,查询“FID”字段是为偶数的要素对象,可使用“round(FID/2,0)*2= FID”这个查询语句来实现。
例2获得等高线长度大于平均值
测试数据:“chp11复合查询.mdbdgx”,查询等高线长度大于平均值的要素记录,具体的输入查询语句内容及界面如图11-3所示。
图11-3获得等高线长度大于平均值的复合查询
注意:图11-3查询条件中字段外带的中括号“[]”可以去掉。上述输入的查询语句该改成:“Shape_Length>(select avg( Shape_Length) from dgx) ”,这里“avg”是计算平均值的函数,查询的数据可以是mdb和gdb格式数据,但不能是SHP文件,SHP不支持复杂查询及多个表之间嵌套。
最后
以上就是受伤帽子为你收集整理的oracle 模糊查询_ArcGIS的属性查询的全部内容,希望文章能够帮你解决oracle 模糊查询_ArcGIS的属性查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复