2015-10-14 156 views
0

我有一個mysql語句來檢索表中的值,該表稱爲dateTable(我在此表中有date(STRING)和dayId(INT)列),我想用特定日期格式檢索值,如果該日期不存在確切的日期格式yyyy-mm-dd,則搜索是否具有格式dd-mm的日期,否則檢索該日期的星期幾的記錄。下面的查詢返回所有可能性(日期格式爲yyy-mm-dd,日期格式爲mm-dd,日期爲星期幾,即在這種情況下爲4)MY SQL IF聲明

請注意,我試過CASE WHEN,它給了我同樣的結果

SELECT 
    * 
FROM 
    dateTable 
WHERE 
    dateTableId = 4 
     AND IF(STR_TO_DATE(date, '%Y-%m-%d') = DATE_FORMAT('2015-08-19', '%Y-%m-%d'), date=STR_TO_DATE(date, '%Y-%m-%d'), 
     IF(STR_TO_DATE(date, '%m-%d') = DATE_FORMAT('2015-08-19', '%m-%d'), date=STR_TO_DATE(date, '%m-%d'),dayId = DAYOFWEEK('2015-08-19'))) 

回答

0

我想你需要一個union all

SELECT dt.* 
FROM dateTable dt 
WHERE dateTableId = 4 AND 
     date = '2015-08-19' 
UNION ALL 
SELECT dt.* 
FROM dateTable dt 
WHERE dateTableId = 4 AND 
     DAYOFWEEK(date) = DAYOFWEEK('2015-08-19') AND 
     NOT EXISTS (SELECT 1 
        FROM dateTable dt 
        WHERE dateTableId = 4 AND date = '2015-08-19' 
       ); 

我不知道你想什麼比較使 - 你是大肆比較日期和字符串不考慮類型。這個邏輯是基於你的描述,但它可以很容易地調整。關鍵是not existsunion all

+0

但是這是一個大表,並且這是一個子查詢,在這種情況下可以做UNION .... – Dev

+0

@Dev。 。 。這似乎是你的邏輯要求。如果您擔心,您可以發佈*另一個*問題,提供有關您實際使用的查詢的更多詳細信息。 –