Skip To Content

处理字段

如果您是托管要素图层的所有者或组织的管理员,则可在托管要素图层上添加、删除和计算字段。但需要遵循一些限制条件;例如,不能删除或计算 OBJECTID 字段。有关约束条件的完整列表,请参阅约束条件部分

先决条件:

要添加、删除或计算表中的字段,您需要先显示表。有关表的详细信息,请参阅显示表

  1. 打开想要在表中查看其要素数据的地图。
  2. 单击详细信息,然后单击内容
  3. 浏览至要素图层,然后单击显示表。该表将显示在地图的底部。

添加字段

  1. 单击表选项
  2. 单击添加字段
    • 名称 - 字段名称不应包含特殊字符,如空格、连字符、圆括号、方括号或 $、% 和 # 这样的字符。避免在字段名中使用通常视为数据库保留关键字的词,如 CHARACTERDATE。如果尝试添加包含特殊字符或数据库保留关键字的字段名,您将收到一条错误消息。
    • 别名 — 字段的替代名称,与名称相比,它更具描述性且简明易懂。别名可以包含特殊字符和数据库保留关键字。
    • 类型 - 以下任一类型:
      • 日期 - 日期和时间。请参阅日期函数部分中的说明。
      • 双精度 - 具有小数位的数。
      • 整数 - 介于 -2,147,483,648 和 2,147,483,647 之间的整数(长整型)。
      • 字符串 - 任意字符序列。
    • 长度 - 字符串字段可存储的最大长度,以字符为单位。对于字符串字段类型而言,长度是必需的。默认值为 256 字符。

删除字段

  1. 单击要删除的字段所在的列。
  2. 单击删除。系统会询问您是否确定要删除该字段。

对于一些字段,如 OBJECTIDCREATIONDATECREATOREDITDATEEDITOR 字段以及地图中用于样式和过滤器的字段,删除选项不可用。但其他地图中用于符号系统和过滤器的字段可能不同于您的地图使用的字段,删除可用于这些字段。在删除可能用于其他地图的符号系统和过滤器的字段时务必谨慎。

计算字段

  1. 单击要进行值计算的字段所在的列。
  2. 单击计算。此操作将打开表达式构建器对话框。

基本操作

表达式构建器对话框中,可使用加减乘除等运算符来构建简单表达式。

  • 要将 SAMPLE 数值字段中的所有值都乘以 100.0,请输入 SAMPLE * 100.0 作为表达式。
  • 对于更为复杂的公式,可使用圆括号来指定计算顺序,例如,SAMPLE * (BASELINE - 40)
  • 数学运算符不适用于字符串字段。您需要用到本主题中介绍的字符串函数。
  • 如果您正在将双精度类型的字段换算成整数类型的字段,系统可能会自动将 CAST 函数添加到表达式中。例如,如果您正在将名为 POP 的双精度字段换算成名为 SAMPLE 的整数字段,表达式将显示为 CAST(SAMPLE AS FLOAT)。不要移除 CAST 函数。有关 CAST 函数的信息,请参阅下面的数值函数
  • 想要在字符串中包括单引号,需使用一对单引号。例如 'Nightingale''s'。不要使用双引号。

在创建表达式之后,单击计算按钮。如果出现任何错误,对话框底部将显示一条错误消息。

其他注意事项

  • 如果图层中存在过滤器,系统将仅计算符合过滤器条件的记录的值。
  • 表达式构建器仅适用于字段名称,而不适用于字段别名。字段列表可显示所有可进行计算的字段名称。您可以按字符串数值日期等字段类型来过滤列表。
    • 如果将鼠标悬停在字段列表中的某个字段名称上,将显示字段别名和字段类型。
    • 如果单击字段列表中的字段名称,该字段将添加到表达式。

使用函数

除了使用运算符的简单表达式以外,您也可以使用函数。函数适用于字段名称、文本和其他函数。例如,假设您需要将一个双精度字段的值换算成 TOTALPOP 除以 POP18。如果任意要素的 POP18 等于零,计算将引发一个除数为零的错误。可使用 NULLIF 函数以避免发生此类错误,如下所示。表达式为 TOTALPOP / NULLIF(POP18, 0)

函数接受参数。在下表中,任一参数都可为以下内容:

  • 字段名称,只要字段类型与参数类型(字符串、数值或日期)相匹配即可。
  • 文本,如 'Sailboat'(用单引号引起来的字符串)、数字 5 或用单引号引起来 MM/DD/YYYY hh:mm:ss 格式的日期。
  • 如果您的组织允许进行非标准 SQL 查询,那么字符串文本中的非英文字符必须使用 N 进行转义(例如 N'针叶林')。
  • 可返回相应类型的值(字符串、数值、日期)的函数。例如,FLOOR(POWER(SAMP_ERR, 0.5)) 返回小于或等于 SAMP_ERR 的平方根的最大整数。

出于举例说明的目的,下表描述列中的示例大多使用文本参数。您可以用字段名称或其他函数来代替这些参数。

字符串函数

功能说明

CHAR_LENGTH(string)

返回字符串的字符数。结果为整数。

示例:

  • CHAR_LENGTH('Redlands') - 结果为 8。

CONCAT(string1,
string2)

连接两个字符串。

只能提供两个字符串。要连接两个以上的字符串,需嵌套连续的 CONCAT,如下面的示例所示。

示例:

  • CONCAT('A', 'B') - 结果为 'AB'。
  • CONCAT('A', CONCAT(':', 'B')) - 结果为 'A:B'。

空值会转换成空字符串。

POSITION(substring, 
string
)*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 POSITION(substring in string)。

返回 string 中第一次出现 substring 的位置。如果没有找到 substring,结果为 0。

示例:

  • POSITION('boat', 'Sailboat') - 结果为 5。
  • POSITION('motor', 'Sailboat') - 结果为 0。

SUBSTRING(string, start,
length)

返回 string 的一部分;start 是一个整数索引,它指定所返回的字符从哪里开始,length 为返回的字符数。

示例:

  • SUBSTRING('Sailboat', 5, 4) - 结果为 'boat'。
  • SUBSTRING('Sailboat', 1, 4) - 结果为 'Sail'。
  • SUBSTRING('Sailboat', 5, 100) - 结果为 'boat'。

TRIM(BOTH | LEADING | TRAILING ' ' FROM string)

返回从 string 中移除所有前导或尾随空格后的字符串。

示例:

  • TRIM(BOTH ' ' FROM ' San Bernardino ') - 结果为 'San Bernardino'。

请注意,第二个参数是由空格连接的两个单引号。

UPPER(string)

返回将 string 中的所有字符转换成大写后的字符串。

示例:

  • UPPER('Sailboat') - 结果为 'SAILBOAT'。

LOWER(string)

返回将 string 中的所有字符转换成小写后的字符串。

示例:

  • LOWER('Sailboat') - 结果为 'sailboat'。

数值函数

除下面介绍的数值函数以外,还可以计算数据列的统计数据。这些统计数据包括记录数、最小值和最大值、所有值的总和、平均值和所有值的标准差。

  1. 单击要获取其值统计数据的字段所在的列。
  2. 单击统计数据。一个对话框将显示计算的统计数据。

功能说明

ABS(number)

返回 number 的绝对(正)值。

CEILING(number)

返回大于或等于 number 的最小整数。

示例:

  • CEILING(12.93) - 结果为 13。

COS(number)

返回 number(假设其为以弧度为单位的角)的三角余弦值。

CAST(number AS FLOAT | INT)

将 number 转换为其他类型。FLOAT 将 number 转换为双精度类型,INT 则将其转换为整型。

FLOOR(number)

返回小于或等于 number 的最大整数。

示例:

  • FLOOR(12.93) - 结果为 12。

LOG(number)*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 LN(number, decimal_place)。

number 的自然对数。

LOG10(number)*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 LOG(number, decimal_place)。

number 的以 10 为底的对数。

MOD(number, n)

返回将 number 除以 n 后所得的余数。nnumber 都必须为整型。

示例:

  • MOD(10, 4) - 结果为 2。
  • MOD(CAST(DBLFIELD AS INT), 4) - DBLFIELD 是双精度类型字段,所以需使用 CAST 函数将值从双精度型转换为整型。

NULLIF(number, value)

如果 number 等于 value,则返回 null。NULLIF 通常用于防止出现因将 value 设置为 0 而产生的除数为零的错误。

只要计算中任意参数出现 null 字段值,计算结果即为空。

例如,假设您需要将一个双精度字段的值换算成 TOTALPOP 除以 POP18。如果任意要素的 POP18 等于零,计算将引发一个除数为零的错误。您可以创建一个过滤器来隐藏 POP18 为零的那些记录,然后再执行计算。也可以使用捷径 NULLIF。

  • TOTALPOP / NULLIF(POP18, 0) - 如果 POP18 等于 0,则返回 null;否则,返回 TOTALPOP / POP18 的值。

POWER(number , y
)

返回以 number 为底,以 y 为指定指数的幂值。

ROUND(number , length)

number 舍入到指定长度。

如果 length 为正数,number 将舍入到由 length 指定的小数位置。如果 length 为负数,其将舍入到小数点左侧的相应位置。

示例:

  • ROUND(10.9934,2) - 返回 10.99。
  • ROUND(10.9964,2) - 返回 11.00。
  • ROUND(111.0,-2) - 返回 100.00。

SIN(number)

返回 number(假设其为以弧度为单位的角)的三角正弦值。

TAN(number)

返回 number(假设其为以弧度为单位的角)的正切值。

TRUNCATE(number, decimal_place)*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 TRUNC(number, decimal_place)。

在指定的 decimal_place 截断 number

正的 decimal_place 将截断至指定的小数位置。如果 decimal_place 为负数,将在小数点左侧的相应位置进行截断。

示例:

  • TRUNCATE(111.996,2) - 返回 10.99。
  • TRUNCATE(111.996,-2) - 返回 100.00。

日期函数

可将日期和时间分配至日期字段。诸如减去两个日期或者向日期字段中加入时间等操作不受支持。

在开始计算日期字段之前,应知晓一些基本事项。

更改日期字段显示格式

您可以更改日期在表中的显示方式。表采用您在弹出窗口中配置的格式进行显示。可通过在弹出窗口属性配置属性窗口中选择字段别名来更改日期字段的显示格式。

以 MM/DD/YYYY hh:mm:ss 格式输入日期

无论日期在表中的显示方式如何,您只能以 MM/DD/YYYY hh:mm:ss 格式输入日期,并用单引号引起。例如,要将日期字段设置为 2014 年 5 月 27 日 5:00PM,需输入 '05/27/2014 05:00:00PM''05/27/2014 5:00PM''05/27/2014 17:00:00'(24 小时制)。不支持单独存储时间 — 时间必须始终是日期的一部分。

日期以 UTC 时间格式输入和存储

假定表中的日期字段包含 UTC 日期和时间。UTC 代表“协调世界时间”,它与位于英国格林尼治附近的地球本初子午线(零度经线)的当前时间几乎相同。UTC 是 GMT(格林尼治时间)更为精确的版本。将日期假定为 UTC 格式是因为托管数据的服务器所在的物理位置可以是世界上的任意地点。改为使用当地时区格式存储日期和时间会带来各种各样的问题,特别是当您或托管数据的服务器移至其他时区时。

每当显示日期字段时,都会将日期从 UTC 时间转换成您的当地时间。此操作可通过查询计算机并请求其时区设置来实现。例如,假设您的计算机设置为太平洋标准时间 (PST)。PST 比 UTC 晚八小时 - 当 UTC 时间为 9:00AM 时,PST 时间为 1:00AM(或 2:00AM,取决于夏时制是否生效)。

您在表达式中输入的所有日期均假定为 UTC 时间,而不是您所在当前时区的时间。这个假设会引起混淆。例如,如果使用设置了 PST 的计算机输入 '05/27/2014 05:00:00PM',由于发生了前文介绍的时间转换,其将显示为 5/27/2014 9:00AM。

要对从 UTC 到当地时区的转换作出解释,可采用以下提示:

  • 如果需要输入当前的日期和时间,请使用以下时间函数之一,因为这些函数始终返回 UTC 时间。
  • 如果输入不带时间部分的日期,请将该日期加上 12 小时。例如,输入 '5/27/2014 12:00PM''5/27/2014 12:00',而不是 '5/27/2014'。需要输入此偏差的原因在于,当输入不带时间部分的日期时,其将采用该日期的午夜时间进行输入(5/27/2014 转换为 5/27/2014 00:00:00),当此日期以您的当地时区显示时,会加上或减去小时数。例如,如果您位于 PST 时区并输入 5/27/2014,它会显示为 5/26/2014(从 27 日午夜减去了 7 小时)。
  • 如果输入带时间部分的日期,请在时间中计入时区偏差。例如,如果需要输入 5/27/2014 12PM PST,请计入这八小时的时差并输入 '5/27/2014 8:00PM'。要找到您的时区偏差,可使用诸如 UTC 时差计算器等搜索短语在 Web 中搜索。
  • 要以 UTC 时间查看日期字段的内容,可向表中添加字符串字段并将其换算为与日期字段相等。日期将转换为不带时区偏差的字符串。该字符串还包含毫秒。

日期函数

功能说明

CURRENT_DATE()*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 CURRENT_DATE。

以 UTC 时间返回当前日期。

CURRENT_TIME()*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 CURRENT_TIME。

返回当前 UTC 日期和时间(小时、分钟、秒)。

CURRENT_TIMESTAMP()*

注:

*如果门户的托管服务器使用 ArcGIS Data Store,或使用 PostgreSQL 中的托管数据库,那么您必须使用 CURRENT_TIMESTAMP。

返回当前 UTC 日期和时间(小时、分钟、秒、毫秒)。

限制条件

  • 删除功能不可用于 OBJECTID 字段或用于符号系统、时间滑块、过滤器、标注或编辑者追踪的字段。但需注意其他地图中用于符号系统和过滤器的字段可能不同于您的地图使用的字段,删除可用于这些字段。在删除可能用于其他地图的符号系统和过滤器的字段时务必谨慎。
  • 添加、删除和计算功能不可用于图层副本。
  • 添加、删除和计算功能仅可用于托管要素图层。您必须是托管要素图层的所有者或组织的管理员。
  • 只有在您的门户托管服务器使用 ArcGIS Data Store 时,计算功能才可用。
  • 仅支持标准 SQL 查询。