查询时将 Redshift 中的空字符串和 null 字符串替换为默认字符串?

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

我的表有一些 null 和空字符串,当我查询表时这些看起来很难看,所以我想用其他值替换它们。我不拥有数据,所以我无法修改表本身,这需要在我查询时发生。

我尝试使用

regexp_replace
将空字符串替换为
regexp_replace(column, '^$', '(no value found/some other custom message)'
,但这不起作用

sql postgresql amazon-redshift
1个回答
0
投票

null
和空字符串必须分开处理。另外,
''
(空)和
'      '
(空白)之间有区别。

null
是“未知”。
regexp_replace(null, '^$', 'default')
不执行任何操作,因为它匹配的值未知。匹配失败,返回
null

请使用

coalesce
。它返回第一个非空值。
coalesce(thing, 'default')

要捕获空字符串,请搜索

^\s*$
regexp_replace(thing, '^\s*$', 'default')

我们像这样把它们放在一起......

select
  coalesce(regexp_replace(thing, '^\s*$', 'default'), 'default')
from test;

如果

thing
null
regexp_replace
将返回
null
coalesce
将返回
'default'

如果

thing
为空或空白,
regexp_replace
将返回
default
coalesce
将返回
default

如果

thing
不是其中之一,
regexp_replace
将返回
thing
并且
coalesce
将返回
thing

另一种可能更容易理解的选择是:

select
  case 
    when trim(word) = '' then 'default'
    else coalesce(word, 'default')
  end
from test

如果您愿意,您可以将其放入函数中。我们可以声明它

immutable
(相同的参数总是产生相同的结果)可能会提高性能。

create function replace_blanks(text, text) returns text
immutable
as $$
  select coalesce(regexp_replace($1, '^\s*$', $2), $2)
$$ language sql;

select replace_blanks(word, 'default') from test;
PostgreSQL 中的

演示。 Redshift 源自 PostgreSQL,因此它的工作原理应该相同。

© www.soinside.com 2019 - 2024. All rights reserved.