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#'"將發生錯誤
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM