IQueryFilter的WhereClause详解

IQueryFilter的WhereClause详解

源自ESRI中国社区

(这篇随笔是根据ESRI Document Library里对IQueryFilter接口的描述翻译成的,有些地方觉得原文不太清晰,又自己找了点资料完善了一下,看资料还是中文快啊...)  

IQueryFilter.whereclause属性 

IQueryFilter是进行查询选择时经常用到的接口,它可以帮助用户过滤不需要的值或者选择适当的要素。  

IQueryFilter.whereclause属性允许用户设定过滤表达式限定返回的要素。举个例子,我们可以使用下面的表达式来选取面积大于1500平方米的多边形: "Area" >1500. 

这种表达式实质上是一种SQL查询。其查询语法视乎用户正在使用的数据源,即数据库或者数据源上的原本格式(native format). 

为了方便用户,ARCGIS提供了一个叫ISQLSyntax 的接口(在workspace下),用来获取数据源的SQL语法信息,包括间隔符,大小写等信息。对于SQL语法规则不清楚的,

  

字段名规则

     1)如果是在file geodatabase, shapefile, dBase table, coverage, INFO table进行查询,那么字段名应该包含在双引号内:   "AREA" 

     2)如果是在personal geodatabase进行查询,字段名需用方括号括起来:[AREA] 

     3)假如在ArcSDE的地理地理数据库(例如通过数据库连接方式连接到某个ArcSDE的企业地理数据库,或者连接到某个运行着ArcSDE Personal Edition or Workgroup Edition的数据库服务器)或是在ArcIMS image service or feature service是,字段在查询时不需括起来:AREA. 

     4)在Excel或者文本文件上查询时,字段需用单引号括起,除非你正使用的是表格窗口上Select By Attributes对话框,这种情况下,使用方括号[AREA]. 

 

字符串规则

在whereclause表达式里,字符串要用单引号括着,例如:"STATE_NAME" = 'California'. 

存储在Access的Personal geodatabases是不区分大小写的(case insensetive),而ArcSDE, File and shapefiles则会区分大小写(case sensetive)。对区分大小写的数据源(datasource),可以使用SQL函数来统一大小写,以避免查询失败。 

举个例子,假设某个给定的字段名为"Florida", 如果whereclause 是 "State_name = 'florida'",personal geodatabase返回的是美国的一个州,而在shapefiles and ArcSDE则查询不到。  

下面的表达式会选择姓氏为Jones或者JONES的客户:UPPER("LAST_NAME") = 'JONES' 

通配符规则

当你不确定查询字段名或者想用简短的字符串时,可以使用通配符。通配符是一个特殊的符号,用于代表一个或者多个字符,一般包括这几个: “%”,“*”,“ _”,“ ?".  

如果你是在coverage, shapefile, INFO table, dBASE table, or shared geodatabase查询,那么'_' 表示任何一个字符,而 '%' 表示0到任意个字符. 

如果你是在personal geodatabase查询,那么'?' 表示任何一个字符,而 '*' 表示0到任意个字符. 

注意:如果字符串中通配符跟着操作符“=”,那么它将被视为字符串,而不是通配符。 

 

NULL关键字

在geodatabases里字段支持NULL,在shapefiles/dBASE tables and coverages/INFO tables,时间字段可以为NULL.  

NULL一般前面都跟着IS或者IS NOT. 

唯一(Distinct)关键字

file geodatabases不支持关键字Distinct,建议使用IDataStatistics::UniqueValues方法返回唯一值。 

 

SubQuery(子查询) 

子查询就是允许嵌套的SQL查询,只适用于geodatabase数据源。  

Query Numbers(查询数字) 

操作数字的操作符包括: equal (=), not equal (<>), greater than (>), less than (<), greater than or equal (>=), and less than or equal (<=) operators.  

Query Date (查询时间)

查询时间的语法取决于数据类型。在查询时间值时,应该了解正在使用的data source如何表示Date. 

 

举个例子,在.dbf下查询时间,用"Date_Carte = date '1992/02/04'" ,而   "Date_Carte = '1992/02/04'" 或者"Date_Carte = '#1992/02/04#'"将发生错误
 
posted @ 2015-07-03 11:38  AllenRobin  阅读(4004)  评论(0编辑  收藏  举报