SELECT
CASE ps.open WHEN true THEN 'OPEN'
else 'CLOSED' END,
CASE ps.full WHEN true THEN 'FULL'
else 'FREE' END,
ps.availableCapacity
FROM ParkingState as ps
select CONCAT(event.address1,', ', CASE WHEN event.address2 IS NULL THEN '' ELSE concat(event.address2,', ') END, event.city from EventDetail event where event.startDate>=:startDate and event.endDate<=:endDate;
(
(
(case when
type(r)=Item then
i.element.id
else
i.element.id end) = :elementId
and
(case when
type(r)=Item then
i2.element.id
else
i.element.id end) = :elementId
)
or
(case when
type(r)=Item then
i2.element.id
else
i.element.id end) = :elementId
)
7条答案
按热度按时间fxnxkyjh1#
我猜您可以(3.6,4.3)[内联编辑]...用于WHERE子句:
“简单”大小写
case ... when ... then ... else ... end
和“搜索”大小写case when ... then ... else ... end
hec6srdp2#
显然,added in 3.0.4能够做到这一点,但限制是不能在Else子句中使用子选择。
s71maibg3#
请参阅休眠-论坛:https://forum.hibernate.org/viewtopic.php?t=942197
来自团队的回答(Gavin):WHERE子句支持CASE,但HB3的SELECT子句不支持CASE。
并在独立共和军中看到国家为“未解决”。
neekobn84#
下面您可以找到一个正在运行的查询(在PostgreSQL上使用Hibernate),它使用2个Case语句将布尔值替换为相应的文本表示。
9lowa7mx5#
我在HQL中遇到了同样的问题,然后我解决了以下问题
wbrvyc0a6#
我们广泛使用Hibernate HQL查询,我认为最终有一种黑客方式来做这样的事情:
假设我们最初有一个查询
i2.element.id = :someId
然后决定将其扩展为如下所示:
((i.element.id = :someId and i2.element.id=:someId) or (i2.element.id = :someId))
但有一个问题是,我们希望它只根据类类型来查找它,因此使用Case语句:
以上不起作用您可以通过执行以下操作来简化上面的工作:
但这实际上并没有做我们需要它做的事情,我们希望它执行上面的查询,因此知道您可以在WHERE中的WHERE位的CASE语句的末尾赋值一个变量:
我现在已经设法使查询基于Case语句工作,当然它要冗长得多,但实际上与第一个示例相同
f0brbegy7#
以下是在以下条件下使用字符串比较的示例: