在Oracle SQL中为NULL添加位图

时间:2019-04-22 18:21:19

标签: sql oracle

我有下表:

表1

USER_ID     NAME    AGE     GENDER  ZIP_CODE
1           John    33      M       01086       
2           NULL    22      M       01247
3           Brown   NULL    F       01581

我想在位末添加一个位图。

USER_ID     NAME    AGE     GENDER  ZIP_CODE   NULL_COLUMN
1           John    33      M       01086      00000
2           NULL    22      M       01247      01000
3           Brown   NULL    F       01581      00100

逻辑是

  

如果值不是NULL,则分配0

     

如果value = NULL,则分配1

此外,如果我将列设为NULL,则它需要以以下方式更新NULL_COLUMN:

Update table1 set name = NULL;

表1

USER_ID     NAME    AGE     GENDER  ZIP_CODE   NULL_COLUMN
1           NULL    33      M       01086      01000
2           NULL    22      M       01247      01000
3           NULL    NULL    F       01581      01100

Oracle SQL中是否有一种使用条件创建NULL_COLUMN并在值变为NULL时对其进行更新的方法?

2 个答案:

答案 0 :(得分:3)

您可以使用生成的列:

alter table table1
    add null_map generated always as (nvl2(userJ_id, '1', '0') || nvl2(name, '1', '0') || nvl2(age, '1', '') || nvl2(gender, '1', '') || nvl2(zip_code, '1', '0'));

答案 1 :(得分:0)

您可以将concat用于NVL2

select USER_ID 
,NAME
,AGE
,GENDE
,ZIP_CODE
, '0' || NVL2( NAME, '1', '0' ) || 
  NVL2( AGE, '1', '0' ) ||
  NVL2( GENDER, '1', '0' ) || 
  NVL2( ZIP_CODE, '1', '0' ) NULL_COLUMN

来自my_table