如何把if语句中的if语句放在哪里?

时间:2014-06-08 06:48:44

标签: mysql sql

我有一个名为article的表格,其中包含字段daymonthyeartitle。因此,表格中的date文章将为day-month-year,但已以3个不同列的形式存储。我需要从表格中获取已在特定start_dateend_date之间发布的所有文章的标题。

假设start_date也以3个变量的形式给出 -     sdaysmonthsyear

并且end_date为3个变量 -     edayemontheyear

如何编写上面的mysql查询?提前谢谢。

5 个答案:

答案 0 :(得分:1)

最简单的方法似乎是将年,月和日转换为实际日期。然后数据库可以做很多努力。您可以将组件转换为如下日期:

cast('2014-04-01' as datetime)

在查询中,这看起来像:

select  *
from    YourTable
where   cast(concat(`year`, '-', `month`, '-', `day`) as datetime)
        <
        cast(concat(2014, '-', 4, '-', 30) as datetime)

See it working at SQL Fiddle.

答案 1 :(得分:1)

您可以一次比较日期的每个元素:

SELECT * FROM article
       WHERE (year>syear OR 
              (year=syear AND (month>smonth OR 
                               (month=smonth AND day>=sday)))) AND
             (year<eyear OR
              (year=eyear AND (month<emonth OR
                               (month=emonth AND day<=eday))));

答案 2 :(得分:1)

您可以将STR_TO_DATE用于mysql,这是最终的sql:

select * from article 
where  STR_TO_DATE(concat(day,',',month,',',year),'%d,%m,%Y') 
       BETWEEN STR_TO_DATE(concat(@sday,',',@smonth,',',@syear),'%d,%m,%Y')
       AND STR_TO_DATE(concat(@eday,',',@emonth,',',@eyear),'%d,%m,%Y');

以下是SQLFiddle演示

答案 3 :(得分:1)

我假设你的字段是数字。 所以你可以使用以下代码:

select * 
from article
where (year*10000+month*100+day) between (syear*10000+smonth*100+sday) and (eyear*10000+emonth*100+eday)

答案 4 :(得分:0)

将三个字符串连接在一起,然后使用mysql的字符串到日期函数来获取要比较的日期:

SELECT STR_TO_DATE(yourdatefield, '%m/%d/%Y') 
....

“yourdatefield”是您日期部分的串联。