作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 HQL,我可以选择按“studentNumber”或其名称进行订购。
String orderBy = orderByNumber
? "(case when e.studentNumber is null then e.student.name else e.studentNumber end)" : "e.student.name";
但是,如果我选择studentNumber,并且它为空,我应该按姓名排序。为此,我使用了:
(case when e.studentNumber is null then e.student.name else e.studentNumber end)
这很好用,但是当我有超过 10 名学生时,顺序如下:
1
10
11
12
2
3
4
5
6
7
8
9
studentNumber
在数据库和实体中设置为 Integer。我想如果它被认为是一个字符串就会发生这种情况。
谢谢
编辑 1 我尝试了这个新查询:
(case when (case when e.studentNumber is null then e.student.name else e.studentNumber end) = e.studentNumber then cast(e.studentNumber as int) end)
现在它排序正确,但是当 e.studentNumber 为 null 时,不是按名称排序。如果我添加 then 并尝试这个:
(case when (case when e.studentNumber is null then e.student.name else e.studentNumber end) = e.studentNumber then cast(e.studentNumber as int) else e.student.name end)
第一个问题作为僵尸死而复生(1,10,2,3)...
编辑2
我也尝试过合并:
(case when coalesce(e.studentNumber, e.student.name) = e.studentNumber then cast(e.studentNumber as int) else e.student.name end)
两种情况都与上面相同。
最佳答案
我认为这是一个sql错误。在“案例”中,您返回两种不同的数据类型,sql 会自动转换数字类型以满足某种逻辑。我尝试在 Oracle 数据库中执行类似的操作,但结果出现错误,指出返回的数据类型不同。你应该尝试改变你的要求。如果studentNumber不为空,也许你可以尝试将结果转换为数字 https://stackoverflow.com/a/2000061/3543153
编辑 1:使用类似的东西怎么样?
ORDER BY e.studentNumber NULLS LAST, e.student.name NULLS LAST
关于java - ORDER BY 中的 HQL 案例排序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38012769/
我是一名优秀的程序员,十分优秀!