2013-05-02 77 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條件下就足夠了。