ArcGIS Online 要求开发人员在查询托管要素图层时使用标准化 SQL 查询。此选项使开发人员和应用程序查询托管的要素图层更为简便,并有助于防止 SQL 注入攻击。所有 ArcGIS 应用程序自动支持标准 SQL 查询。
标准化查询限制
- 标准化查询会应用于整个组织;无法对某些图层禁用标准化查询。
- 不同工作空间之间的连接不支持标准化查询。
- 不支持子查询作为 where 子句,如 POP_2010 = (SELECT min(POP_2010) FROM counties。
- 也不支持数据库服务(如 Microsoft Azure SQL Database)中的查询。
ArcGIS Online 中支持哪些 SQL 函数?
如果您是一名应用程序开发人员,并且正在使用数据库特有的 where 子句语法,需要更新应用程序代码中的 where 子句以使用 ArcGIS Online 所支持的常规 SQL 语法。下表显示了支持的 SQL 函数以及每个 SQL 函数的语法。在您的应用程序中使用下列函数和语法时,ArcGIS Online 会对其进行转换,使其符合要素图层使用的数据库规范。
日期函数
功能 | 描述 |
---|---|
CURRENT_DATE() | 以 UTC 时间返回当前日期。 客户端中显示的内容取决于您正在使用的客户端。 在 ArcGIS Online 中,将以您的组织或配置文件的时区来显示日期。 |
CURRENT_TIME() | 返回当前 UTC 日期和时间(小时、分钟、秒)。 客户端中显示的内容取决于您正在使用的客户端。 在 ArcGIS Online 中,将以您的组织或配置文件的本地时间来显示时间。 |
CURRENT_TIMESTAMP() | 返回当前 UTC 日期和时间(小时、分钟、秒、毫秒)。 客户端中显示的内容取决于您正在使用的客户端。 在 ArcGIS Online 中,将以您的组织或配置文件的本地时间来显示时间。 |
EXTRACT(<unit> FROM <date>) | 返回指定 <date> 的单个部分 (<unit>)。 可能的 <unit> 值包括但不限于年、月、日、小时和分钟。 示例
|
数值函数
功能 | 描述 |
---|---|
ABS(<number>) | 返回所指定数值的绝对(正)值。 |
CEILING(<number>) | 返回大于或等于指定数值的最小整数。 示例
|
COS(<number>) | 返回 <number>(假设其为以弧度为单位的角)的三角余弦值。 |
CAST(<number> AS FLOAT | INT) | 将 number 转换为其他类型。 FLOAT 可将指定数值转换为双精度型,而 INT 可将其转换为整型。 |
FLOOR(<number>) | 返回小于或等于指定数值的最大整数。 示例
|
LOG(<number>) | 指定数值的自然对数。 |
LOG10(<number>) | 指定数值以 10 为底的对数。 |
MOD(<number>, <n>) | 返回被除数 (<number>) 除以除数 <n> 后的余数。 <n> 和 <number> 必须均为整型。 示例包括以下内容:
|
NULLIF(<number>, <value>) | 若指定数值等于指定值,则返回 null。 NULLIF 通常用于防止出现因将 <value> 设置为 0 而产生的除数为零的错误。 只要计算中任意参数出现 null 字段值,计算结果即为 null。 例如,假设您需要将一个双精度字段的值换算成 TOTALPOP 除以 POP18。 如果任意要素的 POP18 值等于零,则计算将导致一个除数为零的错误。 您可以创建一个过滤器来隐藏 POP18 为零的那些记录,然后执行计算。 也可以使用快捷方式 NULLIF。
|
POWER(<number> , <y>) | 返回指定数值的指定幂的值 (<y>)。 |
ROUND(<number> , <length>) | 将所指定数值四舍五入至指定长度。 如果 <length> 使用正数,则数值将舍入到由 <length> 指定的小数位。 如果 <length> 为负数,则指定的 <number> 将舍入到小数点左侧的相应位置。 示例
|
SIN(<number>) | 返回指定 <number>(假设其为以弧度为单位的角)的三角正弦值。 |
TAN(<number>) | 返回指定 <number>(假设其为以弧度为单位的角)的正切值。 |
TRUNCATE(<number>,<decimal_place>) | 在指定 <decimal_place> 处截断 <number>。 正的 <decimal_place> 将截断至指定的小数位。 若 <decimal_place> 为负数,将在小数点左侧的相应位置截断 <number>。 示例
|
字符串函数
功能 | 描述 |
---|---|
CHAR_LENGTH(<string>) | 返回指定字符串的字符数。 结果为整数。 示例
|
CONCAT(<string1>, <string2>) | 连接两个字符串值。 只能提供两个字符串。 要连接两个以上的字符串,需嵌套连续的 CONCAT 函数,如下所示。 示例
空值会转换成空字符串。 |
POSITION(<substring>, <string>) | 返回所指定字符串中指定子字符串第一次出现时的位置。 如果没有找到指定的子字符串,则结果为 0。 示例
|
SUBSTRING(<string>, <start>, <length>) | 返回部分字符串值;<start> 是一个整数索引,用于指定所返回字符的起始位置,<length> 则为返回的字符数。 示例
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>) | 返回从所指定字符串中移除所有前导或尾随空格后的字符串。 示例
请注意,第二个参数是由空格连接的两个单引号。 |
UPPER(<string>) | 返回所有字符转换成大写后的字符串。 示例
|
LOWER(<string>) | 返回所有字符转换成小写后的字符串。 示例
|