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日更早的图像?
修改
图片可以有一年,但不一定是一个月或一天。
由于
答案 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');