java定制订购MSSQL hibernate Spring boot 2
我正在通过规范实现一个select查询,该规范查询大部分时间以Q开头的列表的结果。例如:
Q2
Q19
Q120
arandomstring
Q3
我想按照以下规则对列表进行排序:
升序:
Q2
Q3
Q19
Q120
arandomstring
降序:
arandomstring
Q120
Q19
Q3
Q2
请注意,第一个字母从字段中去掉,数字被解释为整数。不作为文本
我想知道hibernate规范API和MSSQL是否可以做到这一点?我发现在MSSQL(https://sqlandme.com/2013/11/18/sql-server-custom-sorting-in-order-by-clause/)中已经有类似于自定义排序顺序的东西,但在hibernate文档中,我还没有找到任何东西
是否可以在数据库级别而不是应用程序级别实现此功能
# 1 楼答案
下面是一个可以正常工作的原始SQL Server查询:
Demo
就让这个查询在Hibernate中工作而言,除了
SUBSTRING
不能在ORDER BY
子句中使用之外,它的大部分映射都没有任何问题。要解决这个问题,您可能需要先进行子查询,然后再进行排序# 2 楼答案
这不太理想;如果您的值应被视为数字数据,则应将其存储为数字值
无论如何,您可以使用
STUFF
删除第一个字符,并使用TRY_CONVERT
数字数据类型删除值:理想情况下,如果需要存储数值数据,并且(更重要的是)将其视为数值数据,则应使用数值数据类型。在这里,前缀为
'Q'
的值的数字似乎应该存储在一个单独的int
列中,而不是具有'arandomstring'
前缀的列中。这将意味着问题将变得更加琐碎,因为它只是ORDER BY OriginalColumn, Question
(假设'Q'
表示问题)