在MySQL中,从varchar列中获得的最大价值不超过“ D99999”

时间:2018-07-10 06:21:47

标签: mysql spring-data-jpa

Deposit_number
--------------
D100000
D99999
D50
.....
D4
D3
D2
D1

我正在尝试通过使用以下JPA查询存款来获取记录

Deposit findTopByCompanyOrderByDepositNumberDesc(Company company);

但是结果是我得到包含'D99999'的记录,并且我期望是'D100000'。如果有人有想法解决此问题,请提供帮助。我想使用JPA查询而不是使用SQL本机查询来解决此问题。

1 个答案:

答案 0 :(得分:1)

问题是您的Deposit_number列是文本,但是您希望数字按数字而不是文本排序。假设D是一个常量前缀,并且整个列中只有非数字字符,我们可以尝试以下MySQL查询:

SELECT *
FROM yourTable
ORDER BY CAST(SUBSTRING(Deposit_number, 2) AS SIGNED) DESC;

此查询看起来很难看吗?是的,的确如此,但是再次,您存储存款号码的方式也很丑陋。如果您不想使用上述查询,请考虑将存款编号存储在单独的列中。