2012-03-16 41 views
1

我有一個可以具有X或Y值的分類器列。如果列中有x或y,我的選擇查詢必須按日期進行篩選。SQL根據列中的值通過不同的條件進行篩選

date BETWEEN i.valid_fromX AND i.valid_toX 
date BETWEEN i.valid_fromY AND i.valid_toY 

基本上我需要在SQL下面的等價:

if classifier == X { 
    check if date is between valid_fromX to valid_toX 
} else if classifier == Y { 
    check if date is between valid_fromY to valid_toY 
} 

回答

5

你可以做到這一點與常規的和/或邏輯。這個例子搜索月份,如果分類等於X,而2月,如果分類等於Y:

where classifier = 'X' and date between '2012-01-01' and '2012-02-01' 
     or 
     classifier = 'Y' and date between '2012-02-01' and '2012-03-01' 
+0

媽的,以20秒打我! – Bridge 2012-03-16 11:44:28

+0

爲什麼沒有括號以防萬一? – Ben 2012-03-16 13:49:30

2
WHERE (classifier = 'X' AND [date] BETWEEN valid_fromX AND valid_toX) 
     OR (classifier = 'Y' AND [date] BETWEEN valid_fromY AND valid_toY) 
0

A小調變種:

where date between 
      case classifier when 'X' then valid_fromX when 'Y' then valid_fromY end 
      and case classifier when 'X' then valid_toX when 'Y' then valid_toY end