【问题标题】:DB2 field value replacementDB2 字段值替换
【发布时间】:2023-04-08 04:54:01
【问题描述】:

我有一个 DB2 员工表,其中有一个名为“Name”的列 - varchar。它不是主键。 'Space' 在这里也被认为是有效值。此列下的某些字段只有空格。

现在我需要一个查询,通过将“Space”替换为 NULL 或任何其他默认值(例如“NoName”)来获取此员工表中的所有值。

我的一个想法是在 SELECT 中使用 LTRIM 函数截断值,这将导致“空字符串”,如果我能找到一些返回 NULL 并以“空字符串”作为输入的字符串操作函数,我可以使用COALESCE 的 IFNULL 将 NULL 替换为 'NoName' 作为结果。

但我想不起任何这样的功能。你能帮我吗? 或者有没有其他方法可以做到这一点?

【问题讨论】:

  • 简单COALESCE(columnname, 'NoName')?
  • 具有防止零长度名称的约束。 (还有 名称。)
  • @jarlh coalesce 不会“删除”“空格”,但只有 NULL
  • @DDS,我知道。但为什么允许空间名称? (见我的第二条评论。)
  • @jarlh 因为根据 OP 这些已经存在

标签: sql database string db2


【解决方案1】:

你可以使用类似的东西:

Select case when <your column> = ' '    -- replace spaces
              or <your column> is null  -- replace nulls
              or <your column> = ''     -- replace empty strings
       then 'no data'                   -- with string 'no data'
       else <your column>               -- if 'regular name' returns it
       end as '<your column>'           -- gives the column a meaningful title
from yourtable

当列在“空格”或NULL或空字符串时,它返回字符串“无数据”,否则返回实际值

【讨论】:

    【解决方案2】:
    select name, coalesce(nullif(name, ''), 'NoName') name_new
    from table (values ' ', null, '', 'a') t(name);
    
    NAME NAME_NEW
    ---- --------
         NoName
    -    NoName
         NoName
    a    a
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2020-08-18
      • 2016-10-29
      • 1970-01-01
      • 2019-10-30
      相关资源
      最近更新 更多