2017-09-13 52 views
2

我有一個表如下SQL選擇其中柱子句

date1 | date2 | datechoice 

1-5-17 2-6-17  date2 

Datechoice可以是日期1或日期2。我想先看看datechoice列來決定在where語句中使用哪一列。

示例僞代碼:

CASE WHEN datechoice ='date2' 
    THEN where date2 >= 2-2-17 AND where date2 <= 2-9-17 
    ELSE where date1 >= 2-2-17 AND where date1 <= 2-9-17 

我怎樣才能做到這一點?

回答

5
WHERE (datechoice ='date1' and date1 >= '2017-02-02' AND date1 <= '2017-02-09') 
    OR (datechoice ='date2' and date2 >= '2017-02-02' AND date2 <= '2017-02-09') 
0

這可能是索引使用的嫌疑。由於我們同時考慮了兩個日期,所以我無法看到如何使用索引。一個OR方法或兩個查詢和一個工會實際上可能更有效率。

WHERE case when datechoice = 'date1' then date1 
      when datechoice = 'date2' then date2 end 
      between '2017-02-02' and '2017-02-09' 

慎用利用之間我假設日期1和date2實際上是沒有時間組件日期字段,如果時間存在,那麼你可能有記錄丟失上邊界上。