我有一个SQL数据库,其中包含一个名为premisis
的表。我希望选择premisisnumber
最高的行。
这是我正在使用的SQL:
SELECT max(premisisnr) AS premisisnr FROM premisis
问题是,SQL Server返回错误的值!在我的表中,我有一行premisisnumber
10,但使用上面的SQL语句返回premisisnumber
9行。
为什么呢?另外,我该如何解决这个问题?
答案 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()将起作用。