2014-01-13 29 views
0

我有一個HSQLDB,ver。 1.8.0,數據庫與示例模式像這樣的東西:如何爲每天使用BIGINT類型計算日期行數的HSQLDB形成一個SQL查詢?

CREATE CACHED TABLE ENTRY 
(ENTRYID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY, 
REQID VARCHAR, 
REVOCATIONDATE BIGINT) 

我想檢索每個日期行數,這樣的事情:

 
ENTRYID DATE_COUNT REVOCATIONDATE 

1   10  2014-01-01 
2   5  2014-01-02 
3   15  2014-01-03 

的問題是,REVOCATIONDATE是一個BIGINT而不是一個正常的日期或時間戳。這是供應商提供的數據庫,因此假定架構不允許更改。

如何創建一個SQL查詢來執行此操作?

+0

您將需要一個接受BIGINT值並返回實際日期的函數。沒有進一步的信息,我不知道該函數的代碼可能是什麼樣子。 –

+0

我查看了SQL的1.8用戶指南,但沒有看到與BIGINT日期相關的任何內容。 http://www.hsqldb.org/doc/1.8/guide/ch09.html – atom88

+0

這可能是因爲供應商創建了自己的日期自定義實現。您需要從它們中找出如何在BIGINT中制定日期,以便您可以編寫轉換函數。 –

回答

1

簡單的答案是HSQLDB 1.8是舊版本,不支持一些高級功能。 HSQLDB 2.3.x支持全面的函數在不同表示之間進行轉換。

隨着HSQLDB 1.8,可以在Java中創建自己的函數到時間戳的毫秒值轉換爲的java.sql.Timestamp或java.sql.Date

像這樣的事情在一個類中,你創建:

static java.sql.Date millisToDate(long millis) { 
    return new java.sql.Date(millis); 
} 

如果再包括用於運行數據庫的類路徑這個類,你可以調用函數在SELECT語句是這樣的:

SELECT ENTRYID, "myclass.millisToDate"(REVOCATIONDATE) FROM ENTRY 

你的結果例子是這樣的:

SELECT MIN(ENTRYID), COUNT(ENTRYID), "myclass.millisToDate"(REVOCATIONDATE) FROM ENTRY 
    GROUP BY "myclass.millisToDate"(REVOCATIONDATE) 

我還沒有真正嘗試任何的上述建議,但他們應該工作,也許一些改變。

相關問題