2013-02-27 76 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,那么某些实现可能会在规划过程中发现并自动转换。