SELECT MAX返回错误的值

use*_*279 3 sql-server

我有一个带有表的SQL数据库premisis.我希望选择最高的行premisisnumber.

这是我正在使用的SQL:

SELECT max(premisisnr) AS premisisnr FROM premisis
Run Code Online (Sandbox Code Playgroud)

问题是,SQL Server返回错误的值!在我的表中,我有一行premisisnumber10,但使用上面的SQL语句返回premisisnumber9 行.

为什么?另外,我该如何解决这个问题?

mjs*_*ger 15

这听起来像premisisnr不是数字值,而是char或varchar值.发生的事情是SQL Server基于字符串而不是数值进行排序.因此10在9之前出现,因为1作为角色出现在9之前作为角色.

理想的解决方案是将premisisnr字段更改为int或数值.如果这不是一个选项,您可以执行以下操作:

如果premisisnr是一个整数值:

select max(cast(premisisnr as int)) as premisisnr from premisis
Run Code Online (Sandbox Code Playgroud)

如果premisisnr是十进制值,则必须将十进制值转换为所需的精度和比例.