Postgresql 动态避免表中的某些字符串
我有一个包含客户详细信息的表,我需要从表中排除特定域(从电子邮件字符串中标识)中的某些电子邮件。 我该怎么做 尝试了以下内容,但没有任何想法或建议 PostgreSQL版本11Postgresql 动态避免表中的某些字符串,postgresql,Postgresql,我有一个包含客户详细信息的表,我需要从表中排除特定域(从电子邮件字符串中标识)中的某些电子邮件。 我该怎么做 尝试了以下内容,但没有任何想法或建议 PostgreSQL版本11 WITH CTE AS ( select 'gmail.com' as name union select 'yahoo.com' ) ,base as ( SELECT 'email ILIKE ''%'||name||'%''OR' as emails FROM CTE ) ,finals as (
WITH CTE AS
(
select 'gmail.com' as name
union
select 'yahoo.com'
)
,base as
(
SELECT 'email ILIKE ''%'||name||'%''OR' as emails FROM CTE
)
,finals as
(
SELECT string_agg(emails, ' ') as con FROM base
)
SELECT * FROm customers
WHERE (SELECT con FROM finals )
我犯了一个错误
ERROR: argument of WHERE must be type boolean, not type text
LINE 16: WHERE (SELECT con FROM finals )
^
SQL state: 42804
Character: 242
不能构造SQL字符串并在单个SQL语句中运行它 但我认为这可以做得简单得多:
WITH cte AS (
SELECT 'gmail.com' AS name
UNION ALL
SELECT 'yahoo.com'
)
SELECT * FROM customers
WHERE email ILIKE ANY (SELECT '%' || name || '%' FROM cte);
请提供输入样本数据和预期输出。到底是什么不起作用?@S-ManI已经更新了我的问题并包含了错误消息,请在此提供任何建议。