Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在字符变化列上对spring数据jpa存储库进行排序_Spring_Jpa_Spring Data Jpa_Spring Repositories - Fatal编程技术网

如何在字符变化列上对spring数据jpa存储库进行排序

如何在字符变化列上对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,因此问题也是如此。有什么解决办法吗 我们希望对此类值的字符类型列进行数字排序。

大家好,我们正在使用postgress数据库和java中的spring数据jpa存储库来使用这些数据。现在我们有一列(版本)类型为“字符变化(255)”,列的数据为
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;