IQueryFilter.whereclause属性
IQueryFilter是进行查询选择时经常用到的接口,它可以帮助用户过滤不需要的值或者选择适当的要素。
IQueryFilter.whereclause属性允许用户设定过滤表达式限定返回的要素。举个例子,我们可以使用下面的表达式来选取面积大于1500平方米的多边形: "Area" >1500.
这种表达式实质上是一种SQL查询。其查询语法视乎用户正在使用的数据源,即数据库或者数据源上的原本格式(native format).
为了方便用户,ARCGIS提供了一个叫ISQLSyntax 的接口(在workspace下),用来获取数据源的SQL语法信息,包括间隔符,大小写等信息。对于SQL语法规则不清楚的,
字段名规则
字符串规则
在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'" ,而
在查询统计中,如果对结果精确不是很严格,可以将部分字段过滤:
IFeatureClass.Fields.getField(i).Type==esriFieldType.esriFieldTypeString 当然最好是对不同类型数据进行不同判断