如果您是托管要素图层的所有者或组织的管理员,则可在托管要素图层上添加、删除和计算字段。需要遵循一些限制条件;例如,不能删除或计算 OBJECTID 字段。有关约束条件的完整列表,请参阅约束条件部分。
要添加、删除或计算托管要素图层上的字段,必须先显示图层的属性表。有关表的详细信息,请参阅显示表。
添加字段
- 请按照下面的步骤显示表。
- 单击表选项。
- 单击添加字段。
- 名称 - 字段名称不应包含特殊字符,如空格、连字符、圆括号、方括号或 $、% 和 # 这样的字符。避免在字段名中使用通常视为数据库保留关键字的词,如 CHARACTER 或 DATE。如果尝试添加包含特殊字符或数据库保留关键字的字段名,您将收到一条错误消息。
- 别名 — 字段的替代名称,与名称相比,它更具描述性且简明易懂。别名可以包含特殊字符和数据库保留关键字。
- 类型 - 以下任一类型:
- 日期 - 日期和时间。请参阅使用日期字段。
- 双精度 - 具有小数位的数。
- 整数 - 介于 -2,147,483,648 和 2,147,483,647 之间的整数(长整型)。
- 字符串 - 任意字符序列。
- 长度 - 字符串字段可存储的最大长度,以字符为单位。对于字符串字段类型而言,长度是必需的。默认值为 256 个字符。
删除字段
- 请按照下面的步骤显示表。
- 单击要删除的字段所在的列。
- 单击删除。确认是否要删除该字段。
对于一些字段,如 OBJECTID、CREATIONDATE、CREATOR、EDITDATE 和 EDITOR 字段以及地图中用于样式和过滤器的字段,删除选项不可用。但其他地图中用于符号系统和过滤器的字段可能不同于您的地图使用的字段,删除可用于这些字段。在删除可能用于其他地图的符号系统和过滤器的字段时务必谨慎。
计算字段
- 请按照下面的步骤显示表。
- 单击要进行值计算的字段所在的列。
- 单击计算。
随即显示表达式构建器对话框。
基本操作
在表达式构建器对话框上,可使用加减乘除等运算符来构建简单表达式。示例和提示如下:
- 要将 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) | 返回 string 中的字符数。结果为整数。 示例
|
CONCAT(string1, string2) | 连接两个字符串。 只能提供两个字符串。要连接两个以上的字符串,需嵌套连续的 CONCAT,如下面的示例所示。 示例
空值会转换成空字符串。 |
POSITION(substring, string )* 注:*如果门户的托管服务器使用 ArcGIS Data Store 或 PostgreSQL 中的托管数据库,那么您必须使用 POSITION(string 中的 substring)。 | 返回 string 中第一次出现 substring 的位置。如果没有找到 substring,结果为 0。 示例
|
SUBSTRING(string, start, length) | 返回 string 的一部分;start 是一个整数索引,它指定所返回的字符从哪里开始,length 为返回的字符数。 示例
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM string) | 返回从 string 中移除所有前导或尾随空格后的字符串。 示例
请注意,第二个参数是由空格连接的两个单引号。 |
UPPER(string) | 返回将 string 中的所有字符转换成大写后的字符串。 示例
|
LOWER(string) | 返回将 string 中的所有字符转换成小写后的字符串。 示例
|
数值函数
除下面介绍的数值函数以外,还可以计算数据列的统计数据。这些统计数据包括记录数、最小值和最大值、所有值的总和、平均值和所有值的标准差。
- 单击要获取其值统计数据的字段所在的列。
- 单击统计数据。一个对话框将显示计算的统计数据。
函数 | 说明 |
---|---|
ABS(number) | 返回 number 的绝对(正)值。 |
CEILING(number) | 返回大于或等于 number 的最小整数。 示例
|
COS(number) | 返回 number(假设其为以弧度为单位的角)的三角余弦值。 |
CAST(number AS FLOAT | INT) | 将 number 转换为其他类型。FLOAT 将 number 转换为双精度型,并将 INT 转换为整型。 |
FLOOR(number) | 返回小于或等于 number 的最大整数。 示例
|
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 后所得的余数。n 和 number 都必须为整型。 示例
|
NULLIF(number, value) | 如果 number 等于 value,则返回 null。NULLIF 通常用于防止出现因将 value 设置为 0 而产生的除数为零的错误。 只要计算中任意参数出现 null 字段值,计算结果即为 null。 例如,假设您需要将一个双精度字段的值换算成 TOTALPOP 除以 POP18。如果任意要素的 POP18 等于零,计算将引发一个除数为零的错误。您可以创建一个过滤器来隐藏 POP18 为零的那些记录,然后执行计算。也可以使用捷径 NULLIF。
|
POWER(number , y) | 返回以 number 为底,以 y 为指定指数的幂值。 |
ROUND(number , length) | 将 number 舍入到指定长度。 如果 length 为正数,number 将舍入到由 length 指定的小数位置。如果 length 为负数,其将舍入到小数点左侧的相应位置。 示例
|
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 为负数,将在小数点左侧的相应位置进行截断。 示例
|
日期函数
一些函数适用于日期字段。有关日期函数的列表以及如何使用属性表中日期字段的信息,请参阅使用日期字段。
使用日期字段
可根据日期字段进行一系列计算。例如,您可以增加或减去日期字段中的时间,或计算两个日期字段间的差值。
日期函数
可用的日期函数如下:
函数 | 说明 |
---|---|
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 日期和时间(小时、分钟、秒、毫秒)。 |
EXTRACT(unit FROM date)* 注:*如果门户的托管服务器使用通过 ArcGIS Data Store 创建的关系数据存储或 PostgreSQL 中的托管数据库,那么您必须使用 CURRENT_DATE。 | 返回日期/时间的单个部分,例如,年、月、日、小时、分钟等。 例如
|
计算日期字段
计算日期字段时可以使用任意日期和数字字段以及文本的组合。使用日期文本时,必须使用支持 SQL 的日期格式。
增加或减去日期中的时间
您可能需要增加或减去日期字段中的时间或支持 SQL 的日期文本中的时间,以生成更新的日期字段。例如,可通过向日期中添加时间来计算日后检查或验证的日期。
可通过以下计算来增加或减去日期字段中的时间。第一种使用日期字段进行计算,第二种使用日期文本值进行计算。也可以使用数字字段和数字文本。系统支持字段和文本的任意组合,如第三种和第四种计算所示。<DateField> + / - <NumberField> = updated date
DATE'<SQL-supported Date Literal>' + / - <Number of Days> = updated date
<DateField> +/- <Number of Days> = updated date
DATE'<SQL-supported Date Literal >' + / - <NumberField> = updated date
计算出的日期字段为原始日期加上或减去您希望增加或减少的天数。天数既可以是整数也可以包含小数 - 例如,1.5 表示一天半或 36 小时。
在以下示例中,机器零件于 6/14/2016 的 10:00 a.m 安装。您可以使用以下任意一种计算来生成此安装日期一个月(30 天)后的检查日期。第一种计算使用值为 6/14/2016 的日期字段和值为 30 的数字字段,而第二种计算使用的是日期文本和数字文本。<MyDateField> + <MyNumberField> = 7/14/2016 10:00 AM
DATE'6/14/2016' + 30 = 7/14/2016 10:00 AM
计算两个日期之间的差值
您可能希望计算两个日期间的时间长度。例如,如果您同时掌握了电表的安装日期和检查日期,则您可以计算两个日期之间的差值,以验证安装和检查之间的时间长度是否符合允许的标准。计算结果为数字字段而非日期字段。
可使用任意日期字段和日期文本的组合来计算两个日期间的时间长度。下面的第一种计算使用日期字段,而第二种计算使用日期文本。第三种和第四种计算同时使用日期字段和日期文本。<DateField1> - <DateField2> = number of days in between
DATE'<SQL-supported Date Literal>' - DATE'< SQL-supported Date Literal>' = number of days in between
<DateField1> - DATE'<SQL-supported Date Literal>' = number of days in between
DATE'<SQL-supported Date Literal>' - <DateField2> = number of days in between
其结果为从一个日期字段/文本中减去另一个日期字段/文本计算得出的数字字段。该数字结果(以天为单位)既可以是整数也可以包含小数 - 例如,1.5 表示一天半或 36 小时。
在上文中的电表检查示例中,可使用以下任一种计算来计算安装日期 6/1/2015 与检查日期 10/1/2015 之间的时间长度。第一种计算使用日期字段,第二种计算使用日期文本,第三种和第四种计算同时使用日期字段和日期文本。<InspectionDateField> - <InstallationDateField> = 122 (days)
DATE'10/1/2015' - DATE'6/1/2015' = 122 (days)
<InspectionDateField> - DATE'6/1/2015' = 122 (days)
DATE'10/1/2015' - <InstallationDateField> = 122 (days)
日期字段的注意事项
使用日期字段时需要重点注意以下信息。
更改日期字段显示格式
您可以更改日期在表中的显示方式。表采用您在弹出窗口中配置的格式进行显示。可通过在弹出窗口属性的配置属性窗口中选择字段别名来更改日期字段的显示格式。
以 MM/DD/YYYY hh:mm:ss 格式输入日期
无论日期在表中的显示方式如何,您只能以 MM/DD/YYYY hh:mm:ss 格式输入日期,并用单引号引起。例如,要将日期字段设置为 2014 年 5 月 27 日 5:00 PM,需输入 '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:00 a.m 时,PST 时间为 1:00 a.m。(如果采用夏令时,则该时间为 2:00 a.m)。
您在表达式中输入的所有日期均假定为 UTC 时间,而不是您所在当前时区的时间。这个假设会引起混淆。例如,如果使用设置了 PST 的计算机输入 '05/27/2014 05:00:00PM',由于发生了前文介绍的时间转换,该时间将显示为 5/27/2014 9:00 AM。
要对从 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 12 PM PST,请计入这 8 小时的时差并输入 '5/27/2014 8:00PM'。要找到您的时区偏差,可使用诸如 UTC 时差计算器等搜索短语在 Web 中搜索。
- 要以 UTC 时间查看日期字段的内容,可向表中添加字符串字段并将其换算为与日期字段相等。日期将转换为不带时区偏差的字符串。该字符串还包含毫秒。
限制
- 删除 功能不可用于 OBJECTID 字段或用于符号系统、时间滑块、过滤器、标注或编辑者追踪的字段。但需注意其他地图中用于符号系统和过滤器的字段可能不同于您的地图使用的字段,删除可用于这些字段。在删除可能用于其他地图的符号系统和过滤器的字段时务必谨慎。
- 添加字段、删除和计算不可用于图层的副本,或具有相关切片图层的托管要素图层。
- 添加字段、删除和计算功能仅可用于托管要素图层和表。您必须是图层的所有者或组织的管理员,才能使用此功能。
- 仅支持标准 SQL 查询。