如何在查询中使用PostgreSQL ILIKE?

fxnxkyjh  于 2022-12-03  发布在  PostgreSQL
关注(0)|答案(1)|浏览(184)

我希望在查询中使用ILIKE来查找结果。
在我的tbl_customers中,我有3列:first_name, last_name, national_code
我将值作为字符串发送,其中包含所有参数,如下所示:'name lastname 1234910'
下面是我的疑问:

SELECT 
    t1.id, 
    concat(t1.first_name, ' ', t1.last_name) as full_name,
    t1.national_code,
    row_number() over (order by t1.published_at desc)
    
    FROM tbl_customers as t1 RIGHT JOIN tbl_ticketings as t2  ON t1.id = 
        t2.customer_id 
    WHERE  (
     (t1.first_name ILIKE '%'|| _customer_info || '%') OR (t1.last_name 
     ILIKE '%'|| _customer_info || '%') 
       OR (t1.national_code ILike '%'|| _customer_info || '%')
         )
    Group BY t1.id
    ORDER BY 
    t1.published_at desc

变量_customer_info等于'name lastname 1234910'
当我运行此查询时,什么也没有得到。
我分别更改了_customer_info'name''lastname''1234910',我得到了结果,但我不想这样使用。
我没有任何语法错误,我知道我的ILIKE查询有问题;我错在哪里?

axr492tv

axr492tv1#

你有这样的东西:

WHERE '1234910' ILIKE '%name lastname 1234910%'

你想要它,反之亦然:

WHERE 'name lastname 1234910' ILIKE '%1234910%'

不过,我建议不要在这里用ILIKE蒙混过关。将变量分成三部分,然后直接比较。这样更快也更安全。

WHERE t1.first_name    = REGEXP_SUBSTR(_customer_info, '[^ ]+', 1, 1)
   OR t1.last_name     = REGEXP_SUBSTR(_customer_info, '[^ ]+', 1, 2)
   OR t1.national_code = REGEXP_SUBSTR(_customer_info, '[^ ]+', 1, 3)

相关问题