有没有一个函数可以返回一行的第一个空值?

问题描述 投票:0回答:1

我有下表:

create table table1  
( 
    id serial, 
    workdate date, 
    col1 varchar, 
    col2 varchar, 
    col3 varchar 
); 

我已插入以下数据:

insert into table1(id, workdate) values (DEFAULT, '01/12/2023'); 

现在我更新了它,查看序列的第一个空列。例如:我运行以下更新:

update table1 set col1 = '12' where id = 1; /* there's no relation between col1 and any other data on this query. '12' is just a random value */ 

现在我已经更新了一次,我想创建一个查询来查找第一个 NULL 列,然后更新它。如果 col1 为 NULL,则 12 将被放在那里。否则,如果 col1 有一些非 NULL 值,我想更新 col2 中的 12 (依此类推......)

我怎样才能在 PostgreSQL 中做到这一点? (使用 Postgre 9.6)

我尝试使用 COALESCE 来做到这一点,但是我得到了我正在寻找的完全相反的结果。现在缺乏想法(除了在我的代码上使用大量 CASE WHEN - 我试图不这样做。想做一些更优雅的事情)

sql database postgresql postgresql-9.6 isnull
1个回答
0
投票

尝试以下查询,使用指定的

NULL
更新一行中的第一个
value ('12')
列,使用顺序
CASE
语句按顺序检查每一列。

UPDATE table1
SET
    col1 = CASE
        WHEN col1 IS NULL THEN '12'
        ELSE col1
    END,
    col2 = CASE
        WHEN col1 IS NOT NULL AND col2 IS NULL THEN '12'
        ELSE col2
    END,
    col3 = CASE
        WHEN col1 IS NOT NULL AND col2 IS NOT NULL AND col3 IS NULL THEN '12'
        ELSE col3
    END
WHERE id = 1;
© www.soinside.com 2019 - 2024. All rights reserved.