2015-10-14 84 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。 。 。这似乎是你的逻辑要求。如果您担心,您可以发布*另一个*问题,提供有关您实际使用的查询的更多详细信息。 –