2013-02-27 102 views
1

我很難找出使用SQL2查詢語言比較日期。JCR SQL2查詢比較日期

我希望能夠做的東西是這樣的:

SELECT p.* FROM [nt:base] AS p WHERE EXTRACT(YEAR FROM p.[some_date]) = "2008" 

這可能嗎?這些約束之王有什麼最好的技巧?

謝謝。

回答

5

在查詢中使用日期的最佳方式是使用CAST強制將日期/時間的字符串表示形式轉換爲JCR使用的DATE值。

不幸的是,在你的例子中,你正在尋找一個特定年份內發生的日期。 JCR沒有辦法將年份提取爲整數,所以我知道的唯一標準方法是檢查實際日期是否出現在一年中第一個和最後一個微秒定義的範圍內:

SELECT p.* FROM [nt:base] AS p 
WHERE p.[some_date] >= CAST('2008-01-01T00:00:00.000Z' AS DATE) 
    AND p.[some_date] <= CAST('2008-12-31T23:59:59.999Z' AS DATE) 

您當然可以使用長表示法(過去時期的毫秒數)而不是字符串文字。

​​

你也可以使用一個字符串文字,迫使投龍:

SELECT p.* FROM [nt:base] AS p 
WHERE p.[some_year] = CAST('2008' AS LONG) 

如果some_year

,如果你有某種「年」屬性,這變得更容易屬性在屬性定義中定義爲LONG,那麼某些實現可能會在規劃過程中發現並自動轉換。