0

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

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 的纪元时间和今年的 $end 之间以及在 $st1 和明年的 $end1 之间的月数。假设我在 meta_value 字段中有 2 个日期(2013 年 2 月和 2014 年 2 月),我希望查询返回 2(因为有 2 个 2 月)。

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

4

5 回答 5

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 在两组数字之间,这可能是您的问题。

于 2013-05-02T14:05:49.470 回答
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);
于 2013-05-02T14:05:50.040 回答
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');
于 2013-05-02T14:06:10.567 回答
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')
于 2013-05-02T14:05:33.700 回答
0

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

于 2013-05-02T14:07:41.260 回答