日期之间的Mysql不起作用

时间:2015-08-12 13:45:23

标签: java mysql prepared-statement

我正在编写以下查询以获取两个日期之间的记录。我使用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

以上是一些数据。对于某些记录,此处lastwatchedvarcharlastwatched为空。如果我之前的日期08-05-2015意味着小于当前日期(12),那么上面的查询工作。否则(从2015年5月13日起)它不起作用。请提出任何建议。

3 个答案:

答案 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'传递您的参数,并使用此列修改日期问题。