如何使用char和十进制值对字段进行排序

时间:2019-01-12 04:48:57

标签: jpql

我陷入了我必须排序的情况 'a-2.3' 'a-1.1'和 'a-1.02'。 我们如何在spring数据jpa中使用jpql或使用sql查询来做到这一点。非常感谢您的亲身经历和想法。

基于a-之后的数值的升序排序。

1 个答案:

答案 0 :(得分:0)

这取决于您使用的数据库,例如在Oracle中,您可以使用SQL调用TO_NUMBER(SUBSTR(col, 3))

WITH t (col) AS (
  SELECT 'a-2.3'  FROM dual UNION ALL
  SELECT 'a-1.1'  FROM dual UNION ALL
  SELECT 'a-1.02' FROM dual
)
SELECT col
FROM t 
ORDER BY to_number(substr(col, 3))

这将产生:

a-1.02
a-1.1
a-2.3

当然,如果您的前缀并不总是完全a-,而是动态的,则必须调整分析。

在JPQL中,这可能是可行的:CAST(SUBSTRING(col, 3, LENGTH(col) - 2) AS NUMBER)