NULLIF不支持设置参数错误,即使它不是一个集



array_to_string返回text(916-555-1212),但是postgresql将其视为设置操作,即使使用显式::text强制转换。

select nullif(
  array_to_string( 
    regexp_matches('9165551212', '(d{3})?(d{3})(d{4})')::text[]
    ,'-')::text
  , '');
ERROR:  NULLIF does not support set arguments

但是我可以使用char_length,它需要文本,并且可以使用

select char_length(
  array_to_string( 
    regexp_matches('9165551212', '(d{3})?(d{3})(d{4})')::text[]
  ,'-')::text
)
 char_length 
-------------
      12

但即使在零位和相同错误中也包裹

select nullif(
  char_length(
    array_to_string( 
      regexp_matches('9165551212', '(d{3})?(d{3})(d{4})')::text[]
    ,'-')::text
  )
  ,12)
ERROR:  NULLIF does not support set arguments

我遇到了同样的问题,它似乎与regexp_matches函数有关:

select nullif(          (regexp_matches( '123', '(2)' )        )[1]      , '' )
;  -- ERROR: NULLIF does not support set arguments
select nullif(          (regexp_matches( '123', '(2)' )::text[])[1]::text, '' )
;  -- ERROR: NULLIF does not support set arguments
select nullif( ( select (regexp_matches( '123', '(2)' )        )[1]     ), '' )
;  -- ok: gives "2"

因此,只需将结果包装在子选择中似乎也可以解决这个问题:-/

奇怪。。。如果你做,它会起作用

select 
  nullif(
   (
     select array_to_string( 
       regexp_matches(
         '9165551212',
         '(d{3})?(d{3})(d{4})'
       )::text[]
       , '-' )
   )
   , '')

最新更新