【发布时间】:2016-11-09 13:30:16
【问题描述】:
我目前有一个系统可以过滤和排序数据库中的记录,并将它们作为分页对象返回。其中一行是这样的:
final PageRequest request = new PageRequest(this.pagingSettings.getPageNumber(),
this.pagingSettings.getPageSize(), sortDirection, sortedBy);
这可以正常工作,但现在我遇到了以下情况。我正在尝试对门牌号进行排序,这是我的 Postgres 数据库中的 varchar。例如,我们有 1、12、111、1004,但也有 1A 或 36-BASEMENT。当对这些(字符)值进行排序时,这些值将排序:1、1004、111、12、1A、...
所以,sortedBy 现在是一个字符串,在本例中为 houseNumber。我发现在 Postgres 中使用 ORDER BY 参数 ... ORDER BY NULLIF(regexp_replace(container_number, E'\\D', '', 'g'), '')::int";,排序将完全符合我的要求:1、1A、12、111、...
但是,仅将 sortedBy 字符串更改为 sortedBy = "NULLIF(regexp_replace(container_number, E'\\D', '', 'g'), '')::int"; 似乎不起作用。
有没有人建议如何在不更改数据库的情况下对 PageRequest 数字中的字符值进行排序?
【问题讨论】:
-
你有解决这个问题的办法吗?
标签: java spring spring-data-jpa