SELECT * 
FROM employee 
WHERE is_deleted != true 
  AND (:lastname IS NULL 
       OR lastname ILIKE '%'||lastname||'%'
       OR :firstname IS NULL
       OR firstname ILIKE '%'||:firstname||'%'
       OR :middlename IS NULL
       OR middlename ILIKE '%'||:middlename||'%');

我有一个全名列,我需要根据用户输入的内容(或姓氏和名字一起)按名字、姓氏或父源进行筛选.b告诉我如何实现

推荐答案

SELECT *
FROM employee
WHERE is_deleted != true
  AND (:search_term IS NULL OR 
       (split_part(full_name, ' ', 1) ILIKE '%' || :search_term || '%' OR
        split_part(full_name, ' ', 2) ILIKE '%' || :search_term || '%' OR
        split_part(full_name, ' ', 3) ILIKE '%' || :search_term || '%'));

该查询将使用Split_Part()函数来提取全名的第一、第二和第三部分,然后在过滤中使用它们.ILike运算符用于不区分大小写的匹配.如果SEARCH_TERM参数为NULL,则将跳过过滤,并返回所有行.

Sql相关问答推荐

如何在T—SQL中找到值更改之前的日期?

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

不可能在SQL MERGE子句中引发异常

收到%1、%2或%2邮箱的唯一客户

正在编写查询.我需要将订阅的时间段分为第一个订阅中包含的另一个订阅之前和之后的时间段

SQL计数条目大于日期,包括交叉表中的零

比较SQL中以逗号分隔的字符串

如何在AWS Athena中 Select JSON数组的最后一个元素?

排除具有部分匹配条件的记录

如何在 SNOSQL 中执行反连接(或 where 子句过滤)以查找字段不包含另一个表中的值的行?

Athena 计算从日期到当前时间戳的每月计数

在presto sql中解析带有区域的时间格式

按公司和产品查询最近发票的平均价格的SQL查询

BigQuery数组是否包含NULL值的判断方法

复制SQL Server临时表

使用日期和间隔作为键加入 Athena 上的表?

如何根据某个值在where子句中添加某个条件

SQL查询以获取从特定可变日期看到的用户

在 sql 中合并系列以删除重复项

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数