JCR SQL2查询比较日期

时间:2013-02-27 16:23:18

标签: date jcr

我很难找到使用SQL2查询语言比较日期。

我希望能够做到这样的事情:

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

有可能吗?这些约束之王的最佳技术是什么?

谢谢。

1 个答案:

答案 0 :(得分: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] = 2008

您还可以使用字符串文字并强制转换为LONG:

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

如果在属性定义上将some_year属性定义为LONG,则某些实现可能会发现此属性并在规划期间自动转换。