【问题标题】:Need to replace all the null values with '0' in Vertica需要在 Vertica 中将所有空值替换为“0”
【发布时间】:2020-10-22 10:26:04
【问题描述】:

我有一个垂直表“CUSTOMER”,其中包含大约 10 列。每列包含几个空值。所以我必须编写一个查询,它将所有空值替换为“0”。

是否可以在vertica中做到这一点。谁能帮帮我。

【问题讨论】:

  • 替换,你的意思是选择的结果,还是实际的表值?
  • NULL 值是有意义的,它们不应该被替换。
  • 两者都可以
  • coalesce(column, '0') 将返回非空的列值,否则返回'0'。
  • 谢谢。它对我有用。

标签: sql vertica


【解决方案1】:

你使用coalesce():

select coalesce(col1, 0) as col1, . . . 
from t;

您也可以将类似的逻辑合并到update 中。

【讨论】:

    【解决方案2】:

    SELECT 中,正如@GordonLinoff 所说,您使用COALESCE(),或稍快的NVL()IFNULL()ISNULL() 函数(它们都是彼此的同义词,并且只接受两个参数,而COALESCE() 更灵活 - 有代价 - 使用可变长度参数列表,返回可变长度参数列表的第一个非空值。

    对于更新,努力只更新您需要更新的行,然后为每一列更新:

    UPDATE t SET col1=0 WHERE col1 IS NULL; UPDATE t SET col2=0 WHERE col2 IS NULL;

    好吧,在极端情况下,您最终可能会像更新列数一样频繁地更新同一行,然后您一无所获 - 但值得计划的是尽量减少更新频率。

    或者,您可以考虑:

    UPDATE t SET
      col1 = NVL(col1,0)
    , col2 = NVL(col2,0)
    , col3 = NVL(col3,0)
    [...]
    WHERE col1 IS NULL
       OR col2 IS NULL
       OR col3 IS NULL
    [...]
    ;
    

    由于是列式的,并且由于 Vertica 中的每个 UPDATE 无论如何都是 DELETE 和 INSERT,因此仅更新一列或所有列都没有区别。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 2021-08-31
      • 2023-01-19
      • 1970-01-01
      • 2020-11-19
      • 2010-12-30
      相关资源
      最近更新 更多