如何使用 HQL (Hibernate) 查询日期的平均天数差异?
How can I query the average difference of dates in days using HQL (Hibernate)?
我需要从我的 PostgreSQL 数据库中检索,该数据库已使用 Hibernate 映射到 Java,记录的平均日期差异(如您所说,开始和结束) .
我写了一个原生的 PostgreSQL 查询,效果很好:
SELECT avg(date_part('days', age(datasaida, dataentrada))) as avg_days
FROM processo.processo
WHERE processo.codsituacao = '14'
AND processo.dataEntrada >= now() - interval '30 days';
问题是由于 avg(date_part('days', age(datasaida, dataentrada)))
部分,我不知道如何将此查询转换为 HQL (Hibernate SQL)。
我需要在前端显示信息,我正在使用 JSF Primefaces 构建它。
P.S.: dataEntrada - 表示开始日期 (有点)。 dataSaida 表示结束日期 (kind of)
你可以试试
avg(DAY(function('age', datasaida, dataentrada)))
or
avg(DAY(datasaid - dataentrada))
DAY 是标准的 JPA 函数:http://www.objectdb.com/java/jpa/query/jpql/date
使用函数('age', datasaida, dataentrada) 你可以从JPA调用数据库特定函数
那么你可以在 HQL 中使用 function('function_name', param1, param2)
来调用本机 Postgresql 函数:
SELECT avg(function('date_part', 'days', function('age', datasaida, dataentrada))) as avg_days
FROM processo.processo
WHERE processo.codsituacao = '14'
AND processo.dataEntrada >= now() - interval '30 days';
有关详细信息,您可以查看 the Call PostgreSQL-specific SQL Functions section of the Hibernate with PostgreSQL – 6 things you need to know tutorial。
我需要从我的 PostgreSQL 数据库中检索,该数据库已使用 Hibernate 映射到 Java,记录的平均日期差异(如您所说,开始和结束) .
我写了一个原生的 PostgreSQL 查询,效果很好:
SELECT avg(date_part('days', age(datasaida, dataentrada))) as avg_days
FROM processo.processo
WHERE processo.codsituacao = '14'
AND processo.dataEntrada >= now() - interval '30 days';
问题是由于 avg(date_part('days', age(datasaida, dataentrada)))
部分,我不知道如何将此查询转换为 HQL (Hibernate SQL)。
我需要在前端显示信息,我正在使用 JSF Primefaces 构建它。
P.S.: dataEntrada - 表示开始日期 (有点)。 dataSaida 表示结束日期 (kind of)
你可以试试
avg(DAY(function('age', datasaida, dataentrada)))
or
avg(DAY(datasaid - dataentrada))
DAY 是标准的 JPA 函数:http://www.objectdb.com/java/jpa/query/jpql/date
使用函数('age', datasaida, dataentrada) 你可以从JPA调用数据库特定函数
那么你可以在 HQL 中使用 function('function_name', param1, param2)
来调用本机 Postgresql 函数:
SELECT avg(function('date_part', 'days', function('age', datasaida, dataentrada))) as avg_days
FROM processo.processo
WHERE processo.codsituacao = '14'
AND processo.dataEntrada >= now() - interval '30 days';
有关详细信息,您可以查看 the Call PostgreSQL-specific SQL Functions section of the Hibernate with PostgreSQL – 6 things you need to know tutorial。