SELECT MAX返回错误的值

时间:2012-02-22 16:07:00

标签: sql-server

我有一个SQL数据库,其中包含一个名为premisis的表。我希望选择premisisnumber最高的行。

这是我正在使用的SQL:

SELECT max(premisisnr) AS premisisnr FROM premisis

问题是,SQL Server返回错误的值!在我的表中,我有一行premisisnumber 10,但使用上面的SQL语句返回premisisnumber 9行。

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

2 个答案:

答案 0 :(得分:15)

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

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

如果premisisnr是一个整数值:

select max(cast(premisisnr as int)) as premisisnr from premisis

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

答案 1 :(得分:0)

您可能有一个字符数据类型(char,nchar,varchar等)。

要正确获取数字字段的最大值,您必须使用数字字段,例如INT

将数据类型更改为int,MAX()将起作用。

相关问题