在一个SQL语句中使用BETWEEN运算符两次

时间:2013-05-02 14:02:10

标签: mysql sql phpmyadmin

这是我尝试过的,但没有用。

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE
     `meta_key`='from_dt' AND
      (`meta_value` BETWEEN '$st' AND '$end') AND
      (`meta_value` BETWEEN '$st1' AND '$end1');

我正在计算在$ st和今年年底之间出现的月份数量&介于明年$ st1和$ end1之间。假设我在meta_value字段中有2个日期(2013年2月和2014年2月),我希望查询返回2(因为有2月2日)。

如何在一个sql语句中的运算符之间使用2?

5 个答案:

答案 0 :(得分:2)

您的查询在技术上没有任何错误,但根据您所需的结果,您可能希望使用OR - 只需确保您的括号位于正确的位置:

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE
     `meta_key`='from_dt' AND
      ((`meta_value` BETWEEN '$st' AND '$end') OR
      (`meta_value` BETWEEN '$st1' AND '$end1'))

您当前的查询要求meta_value位于两组数字之间,这可能是您的问题。

答案 1 :(得分:0)

你是说这个吗?

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE
      (`meta_key`='from_dt' AND `meta_value` BETWEEN '$st' AND '$end') OR
      (`meta_key`='from_dt' AND `meta_value` BETWEEN '$st1' AND '$end1')

答案 2 :(得分:0)

也许您正在寻找这些范围内的两个不同的行。为此,请使用having子句:

SELECT COUNT(*) AS month_count
FROM `wp_postmeta`
WHERE `meta_key`='from_dt'
having sum(case when `meta_value` BETWEEN '$st' AND '$end' then 1 else 0 end) > 0 AND
       sum(case when `meta_value` BETWEEN '$st1' AND '$end1' then 1 else 0 end) > 0);

答案 3 :(得分:0)

SELECT COUNT(*) AS month_count 
FROM `wp_postmeta` 
WHERE `meta_key`='from_dt' AND
(`meta_value` BETWEEN '$st' AND '$end') OR (`meta_value` BETWEEN '$st1' AND '$end1');

答案 4 :(得分:0)

我认为你想要一个OR而不是AND。认为在AND bith条件下必须满足,而在OR条件下就足够了。