SQL日期范围 - 如果没有提供起点,请选择全部?

时间:2015-10-16 17:30:27

标签: mysql sql

如果我(在From和To之间)缺少From,我很难弄清楚如何选择记录。

EG。在表单上我有日期范围,如果用户只输入TO并离开FROM,我怎么能选择到目前为止的所有记录。

我的问题出现在这里,

  

SELECT * FROM table WHERE BETWEEN from AND to;

这是我的查询,我想使用相同的查询,只是修改我的变量,这样我就不必根据输入的数据而拥有多个SELECTS。

由于

3 个答案:

答案 0 :(得分:1)

我建议你安排你的申请有两个问题:

SELECT *
FROM table
WHERE date BETWEEN $from AND $to

SELECT *
FROM table
WHERE date <= $to

然后根据是否提供$from来选择查询。

为什么呢?两个查询都可以利用date上的索引。通常,MySQL在使用or条件识别索引使用方面做得不好。

或者,您可以使用AlexK的建议并将$from设置为一些荒谬的旧日期并使用OP中的查询。

答案 1 :(得分:0)

尝试类似:

SELECT * 
FROM table 
WHERE ($from = '' AND date <= $to) OR 
      (date BETWEEN $from AND $to);

答案 2 :(得分:0)

您可以使用上面的Giorgos选择或使用union来执行此操作:

SELECT *
FROM table
WHERE date BETWEEN $from AND $to
UNION
SELECT * 
FROM table
WHERE date <= $to AND $from IS NULL

就我个人而言,我认为Giorgos的解决方案有点清洁,但有时你会想要一个UNION,所以我要包括完整性。