2014-10-06 86 views
1

想获得与乔达时间日期时间差(即开始日期-2014-02-26和结束日期 - 2014年2月26日)一天,但我保持在获得空白表格。当我更改为开始日期-2014-02-26和enddate-2014-02-27数据得到显示。下面是示例代码如何获得日期时间差在一天约达时间在Java

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

Date todaydate = new Date(); 
DateTime jodaToday = new DateTime(todaydate); 

String datefrom = sdf.format(jodaToday.toDate()); 
String dateto = sdf.format(jodaToday.plusDays(1).toDate()); 

和我的查询如下所示。

ProductTable.setContainerDataSource(storeData(
    "SELECT * FROM sales where sale_time BETWEEN '" 
    + datefrom + "' AND '" + dateto + " ' ORDER BY sale_time DESC" 
)); 

我能错过什么?

注意:当我做了测试与下面的查询,我得到的数据

SELECT * FROM sales WHERE sale_time BETWEEN 
'2014-02-26 00:00:00' AND '2014-02-26 23:59:59' ORDER BY sale_time DESC; 

感谢

+0

是表列DATE或DATETIME(或'TIMESTAMP')的类型吗?如果前者,那么这很奇怪。如果后者和价值在时间上有所不同,那么你应该使用第二种方法。 – 2014-10-06 14:52:00

+1

你有“来自未来的数据”吗? – maszter 2014-10-06 14:52:03

+0

@LuiggiMendoza表列是TIMESTAMP。哪个第二种方法? – pmaingi 2014-10-06 15:04:59

回答

1

有点困难给无表和数据的答案,

  1. 套装断点指向“datefrom”并检查是否正确设置了“datefrom”和“dateto”。
  2. 检查表格列DATE或TIMESTAMP。
  3. 检查数据在表中符合你的条件。
  4. 这样的语句,并设置硬编码“datefrom”和“dateto”和执行在你的DBMS的SQL查询。
2

你的问题更多关于理解BETWEEN SQL语句。在简单的话,BETWEEN可以解释为:

FOO BETWEEN A AND B 

即相当于

​​

考虑到这一点,如果你有sale_time >= '2014-02-26' AND sale_time <= '2014-02-26',它会被你的数据库引擎sale_time >= '2014-02-26 00:00:00' AND sale_time <= '2014-02-26 00:00:00'理解。因此,数据库引擎将无法找到值为'2014-02-26 05:32:16'或类似的行。

理解这一点之后,那么你就能理解为什么设置你的作品之间的第二个参数,当您添加一天到今天。 SQL语句应该是:

sale_time BETWEEN '2014-02-26' AND '2014-02-27' 

这可以理解为:

sale_time >= '2014-02-26 00:00:00' AND sale_time <= '2014-02-27 00:00:00' 

我不知道vaadin,但你应该使用的方法,你会发送这些String S作为参数,而不是连接他们来生成查询来执行。请注意,如果你这样做的越来越多,你的应用程序很容易出现SQL Injection。从午夜

2

数据午夜:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

DateTime from = new DateTime(2014, 2, 26, 0, 0).withTimeAtStartOfDay(); 
DateTime to = from.plusDays(1).withTimeAtStartOfDay().minusSeconds(1); 

String datefrom = sdf.format(from.toDate()); 
String dateto = sdf.format(to.toDate()); 

编辑

可能的额外空间的问题是:

...dateto + " ' ORDER BY... 
      ^
+0

已经尝试过,但我仍然得到一个空白页。 yyyy-MM-dd HH:mm:ss仍然没有显示一天,但我喜欢你如何编码它。看看我如何测试它SELECT * FROM sales where sale_time BETWEEN'2014-02-26 00:00:00'AND'2014-02-26 23:59:59'ORDER BY sale_time DESC; – pmaingi 2014-10-06 15:29:45

+0

@pmaingi编辑到23:59:59 – Krayo 2014-10-06 15:37:15

+0

@pmaingi我已将日期更改为2014-02-26。 – Krayo 2014-10-06 15:45:58

0

下面是工作的解决方案。注意用粗体添加时间戳(23:59:59)。

" AND sale_time >= '"+sdf.format(fromdate.getValue())+"' AND sale_time <= '"+sdf.format(Todate.getValue())**+" 23:59:59'"**;