我对如何在SELECT和where子句中处理IFNULL()感到困惑。
我知道HQL改为提供COALESCE(),但我不确定如何继续进行。标准。
sql.eachRow("""SELECT DISTINCT cl.name, b.title, b.type, cb.region, IFNULL(cb.start, c.start),IFNULL(cb.end, c.end)
FROM table.C_B cb
JOIN table.B b on b.id = cb.B_id
JOIN table.C c on c.id = cb.C_id
JOIN table.CL cl on cl.id = c.CL_id
WHERE cb.status='active' AND
DATEDIFF(IFNULL(cb.start, c.start),'""" + startmonth + """') <=0
AND DATEDIFF(IFNULL(cb.end, c.end),'""" + startmonth + """') >0 order by cl.name, b.title"""
) {row ->
str.append('<tr>')
(0..3).each {str.append('<td>' + row[it] + '</td>')}
(4..5).each {str.append('<td>' + String.format('%tY/%<tm/%<td', row[it]) + '</td>')}
str.append('</tr>')
}
sqlProjection是前进的方向吗?
最佳答案
我的建议是不要。 GORM适用于简单的查询和CRUD,但是是允许的,有时甚至必须使用简单的SQL。 HQL可以使您更加接近,因为您可以创建自己的方言,从使用的方言扩展而来,并添加缺少的功能。
查询,条件查询,HQL,SQL都是您可以使用的工具。对于CRUD和简单查询,前者更易于编码和维护,但可能缺少功能,或者在某些情况下不起作用。面向后者,将更易于编写,并针对复杂的性能场景进行调整。简而言之,您将不得不权衡何时使用正确的工具来完成工作。
关于hibernate - 如何将此SQL转换为Grails Gorm条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62632186/