我正在编写以下查询以获取两个日期之间的记录。我使用Mysql
版本5.5
。可能它的重复我完全不知道。但没有答案为我工作,所以我要问。我是在最近一次约会后跟踪最少日期的。即使它不起作用。
问题:清空结果集。
pstmt=con.prepareStatement("SELECT urlid FROM youtubevideos WHERE lastwatched >=? AND lastwatched <=? order by id desc LIMIT 8");
pstmt.setString(1,previousdate);//14-05-2015
pstmt.setString(2,currentdate);//12-08-2015
rs=pstmt.executeQuery();
while(rs.next())
{
.........
}
但是我得到了空的结果集。
我的表youtubevideos
包含记录
urlid lastwatched
-------------------
url1 12-08-2015
url2 11-08-2015
url3 08-05-2015
url4
url5 10-08-2015
以上是一些数据。对于某些记录,此处lastwatched
为varchar
且lastwatched
为空。如果我之前的日期08-05-2015
意味着小于当前日期(12),那么上面的查询工作。否则(从2015年5月13日起)它不起作用。请提出任何建议。
答案 0 :(得分:3)
您使用错误的日期格式为sql:
msg.replyTo = messenger;
改为使用12-08-2015 // this is the output format
:
yyyy-MM-dd
此查询在我的Mysql数据库中运行良好:
2015-08-12 // this is the sql store format
转换字符串:
SELECT * FROM your_table where DATE <= "2015-05-08" AND DATE >= "2015-08-12"
答案 1 :(得分:1)
此处
lastwatched
属于varchar
问题是您将日期字段存储为VARCHAR
类型。如果您的日期格式为Y-m-d
,则此方法有效,因为按字母顺序排序与按日期排序相同。
我建议您将lastwatched
列更改为日期类型,这样可以使BETWEEN
正常工作,并且还可以访问MySQL中的日期函数。
答案 2 :(得分:1)
修复表格中的数据。您不应将真实日期存储为varchar()
。 MySQL为它们提供了很好的数据类型,称为date
(或者datetime
。
这是一种方法:
alter table youtubevideos add column NEW_lastwatched date;
update youtubevideos
set NEW_lastwatched = str_to_date(lastwatched, '%d-%m-%Y');
alter table drop column lastwatched;
alter table rename column NEW_lastwatched lastwatched date;
然后,以ISO标准格式'YYYY-MM-DD'
传递您的参数,并使用此列修改日期问题。