ArcGIS|属性空值

1
分享 2016-06-06
数据中难免会出现空值,空值也分为几种情况,而在不同的数据格式里各种空值又有不同的效果,查询起来情况比较复杂。因此,我力求整理一个大致的思路,涵盖多数问题。我也知道这种基础的横向对比价值不高,空洞乏味,但历史欠账总是要还的,权当练习吧。(本文的测试环境为ArcGIS Desktop 10.3.1)
首先定义一些名称,否则就不能很好的交流了:
  1. 默认空值:创建记录时,属性字段带有的默认值,通常在ArcMap中显示为<Null>;
  2. 空值:为字段赋值后,再删除,得到的值,通常在ArcMap中什么都不显示;
  3. 空格字符:在字符字段中输入一个空格符,在ArcMap中看上去什么都没有,但编辑时可以选中一个字符单位。


希望解决的问题:
  1. 不同字段类型默认空值如何显示,如何设置查询条件;
  2. 空值的情况又如何;
  3. 填入特殊字符,如‘<Null>’、‘Null’、空格字符等,使用时是否会产生混淆;
  4. 如何恢复默认空值;
  5. 大小写是否敏感;
  6. 其他常见的注意事项。


经过测试,总结几个基本通用的规律:
  1. is null或 is not null可以查询默认空值,不区分大小写;
  2. ='' 或 <>''可以查询空值;=' '或 <>' '查询空格字符;
  3. ='xx'或 <>'xx'查询字符串,例如: ='Null'或 ='<Null>';
  4. 须注意,用<>时无法返回默认空的记录,需要同时使用 is null条件;
  5. 数值型字段通常没有空值,用默认空值表示;
  6. 默认空值在代码中的表示与语言相关,如C#中用DBNull,Python中用None。另外的小Bug:属性值如果为'<Null>',直接删除时ArcMap会以为没有做修改无法保存,先改成其他字符再删除则可。


各种数据格式的一些特殊情况:
shapefile:
  1. 查询时区分大小写;
  2. 查询时字段名须带双引号"";
  3. 不存在默认空值和空值,数值型用0代表,字符型用空格字符代表,因此 is null等方法会报错;
  4. 空格字符和空值会混淆,= ''和 = ' '的效果一样会把俩都查出来,<>也是一样的。多个空格字符和带空格字符的字符串也有类似情况,看来是自带TrimEnd功能。


PGDB:
  1. 查询时不区分大小写;
  2. 查询时字段名须带中括号;
  3. 和shapefile一样混淆空格字符和空值。


FGDB:
  1. 查询时区分大小写;
  2. 和shapefile一样混淆空格字符和空值。


ArcSDE for Oracle(ArcSDE 10.0 + Oracle 11.2.0.3):
  1. 查询时区分大小写;
  2. 不会产生空值,删除字符后会变成默认空值,因此 = ''没有意义。
  3. 默认空值和'<Null>'会混淆,IS NULL会选中两者;='<Null>'没有效果,什么都选不中;
  4. 在C#中为字段赋值时,用null,DBNull.Value 或 ""是一样的效果。


~~###ArcSDE for SQL Server(待测试)~~

文章来源:http://www.jianshu.com/p/296f1cd7e55c

0 个评论

要回复文章请先登录注册