sql - 如何将查询转换为 HQL?
问题描述
我在 SQL Server 中有这个查询,它使用两个参数startDate
和endDate
.
您能帮我将其转换为 HQL 以使其独立于数据库吗?
SELECT LeaseTable.CarMake, AVG(LeaseTable.LeaseHours)
FROM
(SELECT lease.carmake,
DATEDIFF(HH, case when lease.startDate <@startdate then @startdate else lease.startDate end, dateadd(DD, 1 ,case when lease.endDate > @endDate then @endDate else lease.endDate end)) as LeaseHours
FROM lease
where
lease.startDate <= @endDate AND lease.endDate >= @startdate) as LeaseTable
GROUP BY LeaseTable.carMake
解决方案
由于 JPQL 不支持子查询,您必须调整查询以获得结果
您可以像这样编写查询
String query = "SELECT l.carMake ,"
+ " AVG("
+ " DATEDIFF("
+ " HH,"
+ " CASE WHEN lease.startDate <:startdate THEN :startdate ELSE lease.startDate end,"
+ " dateadd(DD, 1 ,case WHEN lease.endDate > :endDate THEN :endDate ELSE lease.endDate end)"
+ " )"
+ " )"
+ " FROM lease l"
+ " WHERE l.startDate <= :endDate AND l.endDate >= :startdate"
+ " GROUP BY l.carMake; ";
基本上,将子查询中的date_diff函数取出到AVG函数中
推荐阅读
- javascript - 如何在 javascript/typescript 中使用新的 Gremlin 3.x 语法编写旧查询
- javascript - 从网站中的链接打开 Android 应用
- kotlin - kotlin 检查可为空的布尔值如何工作?
- asp.net - 如何使用带有asp链接的页面上的功能重定向到另一个页面
- python - 逐元素检查字符串是否存在
- html - 在 Ag Grid 中动态更改或设置单元格类
- nim-lang - 从 Nim 的 Neo 矩阵中选择任意行?
- python-3.7 - 在python中包含三个值的元组列表中搜索两个值
- reactjs - Redux:Reducer 在第一次尝试时没有改变状态
- c++ - gcc 警告“没有声明任何东西