ArcGIS 中的查询表达式遵循标准 SQL 表达式。表达式中使用的 SQL 语法因数据源而异。每个数据源都有自己的 SQL 变体,这些变体称为 SQL 方言。
基于文件的数据(包括文件地理数据库、shapefile、内存中表视图、文本文件(如 .dbf)、.csv、.txt、.xlsx表)以及使用标准化查询的要素服务使用支持部分 SQL 功能的 ArcGIS SQL 方言。
常见查询:
搜索字符串:查询中的字符串必须始终用单引号括起,例如:STATE_NAME = 'California'
搜索数值:例如:POPULATION>= 5000
搜索空值:IS NULL 或非空值:IS NOT NULL
计 算:可使用算术运算符 +、-、* 和 / 在查询中加入计算: 可在字段和数字之间、字段之间进行计算,例如:
字段和数字:AREA >= PERIMETER * 100
字段之间:POP1990 / AREA <= 25
一、算术运算符
运算符 | 描述 |
---|---|
* | 乘法算术运算符 |
/ | 除法算术运算符 |
+ | 加法算术运算符 |
- | 减法算术运算符 |
二、比较运算符
运算符 | 描述 |
---|---|
< | 小于。 适用于字符串(基于字母顺序进行比较)、数值和日期。 |
<= | 小于或等于。 适用于字符串(基于字母顺序进行比较)、数值和日期。 |
<> | 不等于。 适用于字符串(基于字母顺序进行比较)、数值和日期。 |
> | 大于。 适用于字符串(基于字母顺序进行比较)、数值和日期。 |
>= | 大于或等于。 适用于字符串(基于字母顺序进行比较)、数值和日期。 |
IS [NOT] NULL | 选择指定字段为空值的记录。 如果 NULL 前置 NOT,则将选择指定字段中包含任意值的记录。 |
三、逻辑运算符
运算符 | 描述 |
AND | 结合两个条件,如果两个条件都为 true 则选择记录。 例如,以下表达式将选择面积大于 1,500 平方英尺且有一个能容纳 2 台以上汽车的车库的所有房屋: |
AREA > 1500 AND GARAGE > 2 | |
[NOT] BETWEEN x AND y | 选择值大于等于 x 且小于等于 y 的记录。 如果前置 NOT,则将选择值在指定范围之外的记录。 例如,以下表达式将选择值大于等于 1 且小于等于 10 的所有记录: |
OBJECTID BETWEEN 1 AND 10 | |
这与以下表达式等效: | |
OBJECTID >= 1 AND OBJECTID <= 10 | |
但是,在查询具有索引的字段时使用包含 BETWEEN 的表达式效率会更高。 | |
[NOT] EXISTS | 如果子查询返回至少一条记录则返回 TRUE;否则返回 FALSE。 例如,如果 OBJECTID 字段包含一个值 50,则以下查询将返回 TRUE: |
EXISTS (SELECT * FROM parcels WHERE OBJECTID = 50) | |
只有文件地理数据库和企业级地理数据库支持 EXISTS 运算符。 | |
[NOT] IN | 如果记录的某个字段包含多个字符串或值的其中一个,那么选择这条记录。 当前置 NOT 时,如果记录的某个字段不包含多个字符串或值的任何一个,那么将选择这条记录。 例如,以下表达式将搜索四个州名称: |
STATE_NAME IN ('Alabama', 'Alaska', 'California', 'Florida') | |
x [NOT] LIKE y [ESCAPE '转义字符'] | 将 LIKE 运算符(不是 = 运算符)与通配符结合使用可以构建对部分字符串的搜索。 百分号 (%) 表示这个位置可以是任意字符,即 1 个字符、100 个字符或者无字符均可。 此外,要在查询时通配符仅代表一个字符,可使用下划线 (_)。 如果需要访问非字符数据,请使用 CAST 函数。 例如,以下查询将返回整数字段 SCORE_INT 中以 8 开头的数值: |
CAST (SCORE_INT AS VARCHAR(10)) LIKE '8%' | |
要在搜索字符串中包含百分号或下划线,请使用 ESCAPE 关键字来将另一种字符指定为转义字符,该字符表示紧接其后的是真正的百分号或下划线。 例如,以下表达式将返回任何包含 10% 的任何字符串,例如 10% DISCOUNT 或 A10%: | |
AMOUNT LIKE '%10$%%' ESCAPE '$' | |
NOT | 选择与表达式不匹配的记录。 例如,以下表达式将选择除 California 之外的所有州: |
NOT STATE_NAME = 'California' | |
OR | 结合两个条件,如果两个条件中至少有一个为 true 则选择记录。 例如,以下表达式将选择面积大于 1,500 平方英尺或有一个能容纳 2 台以上汽车的车库的所有房屋: |
AREA > 1500 OR GARAGE > 2 |
四、字符串运算符
运算符 | 描述 |
---|---|
|| | 返回连接两个或多个字符串表达式后得到的字符串。 FIRST_NAME || MIDDLE_NAME || LAST_NAME |
五、常用字符串函数:
功能 | 描述 |
CHAR_LENGTH(string_exp) | 返回字符串表达式的长度(以字符为单位)。 |
LOWER(string_exp) | 返回一个与 string_exp 中的字符串相等的字符串,所有大写字符都转换为小写字符。 |
POSITION(character_exp IN character_exp) | 返回第一个字符表达式在第二个字符表达式中的位置。结果是一个精确的数字,具有实现定义的精度和零小数位数。 |
SUBSTRING(string_exp FROM start FOR length) | 返回派生自 string_exp 的字符串,从长度字符的 start 指定的字符位置开始。 |
TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp) | 返回从字符串的前导、尾随或两端删除trim_character string_exp。 |
UPPER(string_exp) | 返回一个与 string_exp 中的字符串相等的字符串,所有小写字符都转换为大写。 |
六、数值函数
功能 | 描述 |
ABS(numeric_exp) | 返回 numeric_exp 的绝对值。 |
ACOS(float_exp) | 将 float_exp 的反余弦返回为角度,以弧度表示。 |
ASIN(float_exp) | 将 float_exp 的反正弦值返回为角度,以弧度表示。 |
ATAN(float_exp) | 将float_exp的反正切返回为角度,以弧度表示。 |
CEILING(numeric_exp) | 返回大于或等于 numeric_exp 的最小整数。 |
COS(float_exp) | 返回float_exp的余弦值,其中 float_exp 是以弧度表示的角度。 |
FLOOR(numeric_exp) | 返回小于或等于 numeric_exp 的最大整数。 |
LOG(float_exp) | 返回 float_exp 的自然对数。 |
LOG10(float_exp) | 返回 float_exp 的以 10 为底的对数。 |
MOD(integer_exp1, integer_exp2) | 返回integer_exp1的余数除以integer_exp2。 |
POWER(numeric_exp, integer_exp) | 将 numeric_exp 的值返回为 integer_exp 的幂。 |
ROUND(numeric_exp, integer_exp) | 返回四舍五入到小数点右边integer_exp位的numeric_exp。如果integer_exp为负数,则numeric_exp四舍五入为 |integer_exp|位置在小数点的左边。 |
SIGN(numeric_exp) | 返回 numeric_exp 符号的指示器。如果 numeric_exp 小于零,则返回 -1。如果 numeric_exp 等于零,则返回 0。如果 numeric_exp 大于零,则返回 1。 |
SIN(float_exp) | 返回float_exp的正弦,其中 float_exp 是以弧度表示的角度。 |
TAN(float_exp) | 返回float_exp的正切,其中 float_exp 是以弧度表示的角度。 |
TRUNCATE(numeric_exp, integer_exp) | 返回numeric_exp截断到小数点右边的integer_exp位。如果integer_exp为负数,则numeric_exp被截断为 |integer_exp|位置在小数点的左边。 |
七、数值函数
CAST() 函数将值或表达式从一种数据类型转换为另一种指定的数据类型。语法如下:
CAST (expression AS data_type(length))
其中 expression 是必需参数,可以是文本值或将要转换的任何类型的有效表达式(例如,列名、变量)。
其中 data_type 是必需参数,使用的关键字是表达式将强制转换为的结果数据类型。请参阅下表,了解用于有效数据类型的关键字列表。
其中 length 是一个可选参数,用于指定结果数据类型的长度。
数据类型 | 关键词 |
长整型 | INTEGER |
INT | |
短整数 | SMALLINT |
浮点数(单精度浮点数) | REAL |
浮点默认小数为 7,小数 > 7 相当于双精度 | |
双精度(双精度浮点) | DOUBLE PRECISION |
NUMERIC (p[,s]) | |
DECIMAL (p[,s]) | |
字符串 | CHAR(n) |
VARCHAR(n) | |
CHARACTER(n) | |
日期时间 | DATE |
TIME | |
TIMESTAMP | |
注意:
| |
p - 精度 | |
s - 刻度 | |
n - 定义字符串的长度(以字符为单位) | |
( )—必填参数 | |
[ ]—可选参数 |