如何在字符变化列上对spring数据jpa存储库进行排序
大家好,我们正在使用postgress数据库和java中的spring数据jpa存储库来使用这些数据。现在我们有一列(版本)类型为“字符变化(255)”,列的数据为如何在字符变化列上对spring数据jpa存储库进行排序,spring,jpa,spring-data-jpa,spring-repositories,Spring,Jpa,Spring Data Jpa,Spring Repositories,大家好,我们正在使用postgress数据库和java中的spring数据jpa存储库来使用这些数据。现在我们有一列(版本)类型为“字符变化(255)”,列的数据为val1=11.0.2000.78和val2=11.0.2000.301 当我们使用spring数据jpa存储库启动排序降序查询时,它会在val2上方列出值val1。实际上,它应该在val1上方列出val2 我们了解到,由于列的类型为字符,因此考虑7大于3,因此问题也是如此。有什么解决办法吗 我们希望对此类值的字符类型列进行数字排序。
val1=11.0.2000.78
和val2=11.0.2000.301
当我们使用spring数据jpa存储库启动排序降序查询时,它会在val2
上方列出值val1
。实际上,它应该在val1
上方列出val2
我们了解到,由于列的类型为字符,因此考虑7大于3,因此问题也是如此。有什么解决办法吗
我们希望对此类值的字符类型列进行数字排序。有没有办法在spring数据jpa存储库中进行处理?Yo可以使用一个函数来拆分列的各个部分,然后对这些部分进行独立排序。postgres中有各种字符串函数。请看一看,感谢阿米特,当我在数据库上启动它时,它可以直接工作,但由于我们使用的是jpa规范,所以我不能像您提到的那样在那个里编写自定义查询。所以我想在java端通过它的一个变量实现排序列表。如果您对此有任何想法,请建议JPA支持本机查询。(在服务器内存中排序并不是最有效的方法。例如,如果您需要基于特定排序的前5条记录,该怎么办?您最终将获取内存中的所有记录。)
CREATE TABLE tableone
(
test text
) ;
INSERT INTO tableone(test) VALUES('11.0.2000.78');
INSERT INTO tableone(test) VALUES('11.0.2000.301');
select * from tableone order by test desc;
SELECT
test
FROM
tableone order by
( CAST(
COALESCE(
NULLIF(
replace(test, '.', ''),
''),
'0')
AS numeric) ) desc;