mySQL:提取比特定年份,月份和日期更早的数据

时间:2014-11-26 15:49:58

标签: mysql

我有一张桌子,像这样:

image (image_id, ..., published_date_year, published_date_month, published_date_day , is_listed)

我想提取所有至少有一个published_date_year并且比2006年6月2日更旧的图像

我设法使用< = 2006

的published_date_year提取所有图片
SELECT i.published_date_year, i.published_date_month, i.published_date_day
FROM image i
WHERE i.published_date_year IS NOT NULL AND i.published_date_year <= 2006

如果我在我的查询中添加月份和日期,它将删除其他年份的所有数据,这不是我正在寻找的内容:

SELECT i.published_date_year, i.published_date_month, i.published_date_day
FROM image i
WHERE i.published_date_year IS NOT NULL AND i.published_date_year <= 2006 AND published_date_month <= 6 AND published_date_day <= 2

如何提取至少一年且比2006年6月2日更早的图像?

修改

图片可以有一年,但不一定是一个月或一天。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用str_to_date函数,例如。如下

SELECT i.published_date_year, i.published_date_month, i.published_date_day
FROM image i
WHERE i.published_date_year IS NOT NULL 
AND str_to_date(concat(i.published_date_year,'/',i.published_date_month,'/',i.published_date_day),'%Y/%m/%d') <= str_to_date('2006/06/02','%Y/%m/%d')

答案 1 :(得分:0)

这样的事情应该有效:

select * from (
    SELECT image_id, published_date_year, published_date_month, published_date_day, 
        concat(published_date_year, '-', lpad(ifnull(published_date_month,0),2,'0'), '-', lpad(ifnull(published_date_month,0),2,'0')) as published_date
    FROM image
    where published_date_year is not null) as q
where q.published_date <= '2006-06-02';

更新了您的更新请求。 ifnull()也应该与narendra的解决方案一起使用,如下所示:

SELECT i.published_date_year, i.published_date_month, i.published_date_day
FROM image i
WHERE i.published_date_year IS NOT NULL 
AND str_to_date(concat(i.published_date_year,'/',ifnull(i.published_date_month,0),'/',ifnull(i.published_date_day,0)),'%Y/%m/%d') <= str_to_date('2006/06/02','%Y/%m/%d');