我有一个名为article
的表格,其中包含字段day
,month
,year
,title
。因此,表格中的date
文章将为day-month-year
,但已以3个不同列的形式存储。我需要从表格中获取已在特定start_date
和end_date
之间发布的所有文章的标题。
假设start_date
也以3个变量的形式给出 -
sday
,smonth
,syear
并且end_date
为3个变量 -
eday
,emonth
,eyear
如何编写上面的mysql查询?提前谢谢。
答案 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)
答案 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”是您日期部分的串联。