Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JCR SQL2中选择格式化日期_Java_Jcr_Jcr Sql2 - Fatal编程技术网

Java 在JCR SQL2中选择格式化日期

Java 在JCR SQL2中选择格式化日期,java,jcr,jcr-sql2,Java,Jcr,Jcr Sql2,我想执行一个JCR SQL2查询,它选择日期属性的年份。大概是这样的: SELECT DATE_FORMAT([jcr:created], '%Y') FROM x 类似的东西是否可能=我已经搜索过,但没有找到任何东西,但我可能只是在搜索中表现不佳,所以很抱歉,如果类似的问题以前已经得到回答的话 谢谢 干杯, EvanJSR-283规范中没有任何内容概述了仅获取日期字段的年(或月、日或时间)的方法。完成所需操作的唯一方法是将日期值(使用javax.jcr.query.QueryResult对象

我想执行一个JCR SQL2查询,它选择日期属性的年份。大概是这样的:

SELECT DATE_FORMAT([jcr:created], '%Y') FROM x
类似的东西是否可能=我已经搜索过,但没有找到任何东西,但我可能只是在搜索中表现不佳,所以很抱歉,如果类似的问题以前已经得到回答的话

谢谢

干杯,
Evan

JSR-283规范中没有任何内容概述了仅获取日期字段的年(或月、日或时间)的方法。完成所需操作的唯一方法是将日期值(使用
javax.jcr.query.QueryResult
对象中的行或节点)作为
java.util.Calendar
对象获取,然后

如果您的查询类似于:

SELECT [jcr:created] AS dateField FROM [mix:created] ... 
然后,以下示例显示了如何使用行执行此操作:

javax.jcr.query.QueryResult result = query.execute();
RowIterator iter = result.getRows();
while ( iter.hasNext() ) {
    Row row = iter.nextRow();
    Value value = row.getValue("dateField");
    // Our query won't return a null, since `jcr:created' is mandatory
    // and autocreated on `mix:created`, so we don't have to check 
    // value for null. Other properties, however, may not be mandatory
    // so you might need to check null for other queries ...
    int year = value.getDate().get(Calendar.YEAR);
    // do something with the year
}
了解
value.getDate()
将尝试将实际值转换为日期(如果该值还不是日期),这一点很重要。如果无法转换实际值,则可能会导致异常

如果查询只有一个选择器(例如,
FROM
子句中的一个表),那么结果中的每一行都包含一个节点,而不是像上面那样使用这些行,我们可以得到一个
节点运算符

javax.jcr.query.QueryResult result = query.execute();
NodeIterator iter = result.getNodes();
while ( iter.hasNext() ) {
    Node node = iter.nextNode();
    // The 'jcr:created' property is mandatory (and autocreated), so 
    // in our case we don't have to check if the property exists
    // or handle a PathNotFoundException. And single-valued properties
    // always have a value.
    Value value = node.getProperty("jcr:created").getDate();
    int year = value.getDate().get(Calendar.YEAR);
    // do something with the year
}

请注意,我们必须使用属性名而不是别名。

在我看来,您的查询不是有效的SQL语句。计算机至少需要FROM子句,计算机应该在其中查找节点。@reporter您是对的,它不是有效的SQL语句,只是一个示例。我改变了这一点,以防止混淆,尽管问题将保持不变。我理解你的观点,我在下面回答了你的问题。但您的查询可能会误导其他人:FROM子句中的“x”标识节点类型,而它与表示命名空间前缀的属性名称中的“x”无关。使用不同的名称空间前缀可以消除这种歧义:从x@RandallHauch谢谢你澄清这一点。我编辑了这篇文章!我希望有另一种方法可以直接从服务器获取正确格式的日期。出于各种原因,我不想用Java解析日期。但是谢谢你的回答!