2014-10-06 39 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'"**;