计算列(还需要输入2个字)

一、什么是计算列

计算列(oracle中叫计算列,sql server中好像叫性列)是一种虚拟列,用于根据其他字段的值,经过指定的逻辑计算,得出一个结果,供读取和使用。操作的时候,不需要给它赋值,但读取的时候,跟其他字段没有区别。感觉它就是将sql语句中,有一个字段是计算得到的,它把这个字段固化下来而已,比如下面这个sql语句中的f3,这跟视图是将查询语句固化下来一样:

select f1-f2 as f3 from table1 where f0=0;

二、为什么要用计算列

为什么要用计算列呢?为了方便。比如,我近来就因为项目的需要,在oracle的某个表中创建了一个计算列。原因是我有一个字段,存储的是业务类型。业务类型有多种,可以多选,所以该字段存储了业务类型的ID号,多种类型的话,中间就用逗号隔开,是个字符串类型。比如它的值可能是这样的:“1,2”或者“1,3”。地图服务使用了这张表,需要根据业务类型在地图上展示不同的图标,但这个字符串的话,应用起来很麻烦。于是我就创建了一个计算列,考察该字段第一个字符,它是啥就算是啥业务类型。比如“1,2”,那么就算是业务类型1;“2,3”,就算是业务类型2。这样地图服务不需要做什么计算,根据计算列的值来处理就可以了。

以前我在sql server中用过计算列(性列),是为了判断爬虫爬取的文章内容是否有更改:某个字段存储文章的内容。系统需要将它与新抓取的文章内容比较,比较是否已变更。怎么比较呢,文章内容这么长?就是增加一个计算列,存储文章内容生成的摘要,摘要是MD5编码。然后比较的时候,新抓取的那篇文章内容也生成摘要,二者比较。

三、如何创建计算列

1、创建

以oracle为例。

该计算列的定义语句如下:

ALTER TABLE sde.risk_base
ADD (risk_category_index AS (
    CASE 
        WHEN risk_category IS NULL OR LENGTH(risk_category) = 0 THEN 0
        WHEN SUBSTR(risk_category, 1, 1) = '1' THEN 1
        WHEN SUBSTR(risk_category, 1, 1) = '2' THEN 2
        WHEN SUBSTR(risk_category, 1, 1) = '3' THEN 3
        -- 可以继续添加更多的WHEN条件
        ELSE 0 -- 默认情况,如果risk_category不以1-4开头
    END));

在这里插入图片描述

2、注意

注意,arcgis处理过oracle的表后,似乎会将计算列的定义删除,将它变成一个物理列。我不知道在arcgis这边有什么选项,所以想到的办法,就是arcgis处理完后,将该列删除,然后重建计算列。看上去重建之后,arcgis没有察觉,能正常使用。

posted on 2025-01-21 16:48  左直拳  阅读(0)  评论(0)    收藏  举报  来源

导航