2013-05-02 71 views
0

这是我试过的,但没有奏效。在一条SQL语句中两次使用BETWEEN运算符

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个日期(feb 2013和feb 2014),我希望查询返回2(因为有2月2日)。

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

+3

'meta_value'不能同时是两个不同的值,你的意思是'OR'吗? – Taryn 2013-05-02 14:03:55

+0

其实我试图计算在今年的$ st和$ end以及明年的$ st1和$ end1的时代之间到来的月数。 – Rao 2013-05-02 14:07:18

回答

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

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') 
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); 
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'); 
0

我想你想的或者存在代替和。认为在AND条件下必须满足条件,而在一个OR条件下就足够了。