首页 > 解决方案 > 如何在搜索查询中获取包含日期范围和搜索字段(如“%xyz%”)的记录?

问题描述

这是我的 SQL 查询

SELECT *
FROM `newleads` 
WHERE (ORGANISATIONNAME LIKE "%sa%" AND LEADID LIKE "%%" OR (CONTACTTIME >= "2016-05-02" AND CONTACTTIME < "2019-05-17")) AND
       STATUS = 0

我必须搜索组织名称,如 SA,但在日期范围内,但我得到的记录具有组织名称,如 sa,但未提及日期范围。如果我的日期范围为空或未选择,则结果将显示上述情况

我们可以这样写吗?

WHERE (ORGANISATIONNAME LIKE "%sa%" AND LEADID LIKE "%%" AND (CONTACTTIME LIKE "%2016-05-02%" ) AND STATUS = 0

因此,如果未选择 somwetime 日期,则它将采用所有 SA 结果

或者

WHERE (ORGANISATIONNAME LIKE "%sa%" AND LEADID LIKE "%%" AND (CONTACTTIME LIKE "%(between "fromdate" AND "todate")%" ) AND STATUS = 0

或者

其中 (ORGANISATIONNAME LIKE "%sa%" AND LEADID LIKE "%%" OR (CONTACTTIME BETWEEN (CONTACTTIME LIKE "%fromdate%" AND CONTACTTIME LIKE "%todate%"))) AND STATUS = "0"

标签: phpmysqlsql

解决方案


如果您需要“sa”组织和日期范围,那么我期望这样的查询:

SELECT *
FROM `newleads` 
WHERE ORGANISATIONNAME LIKE '%sa%' AND
      STATUS = 0 AND
      CONTACTTIME >= '2018-05-02' AND CONTACTTIME < '2018-05-17';

字符串和日期常量的标准 SQL 分隔符是单引号,这就是我将双引号改为单引号的原因。MySQL 确实允许双引号。我通常认为这是一种不好的做法,因为双引号还有其他用途(例如转义标识符名称)。


推荐阅读