我目前有一个系统,可以过滤和排序数据库记录,并将它们作为分页对象返回。其中一行如下:
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 数值排序?