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[]
, '-' )
)
, '')