select max(字段名+0) from 表名请问:为什么要加‘0’
测试数据:
1
10
11
12
13
14
15
16
17
18
19
2
20
.
.
.
9
.
.
99
4567没加‘0’查出两位数中的最大值:99
加‘0’查出所有数据中的最大值:4567

解决方案 »

  1.   

    select max(字段名+0) from 表名
    select max(字段名-0) from 表名
    select max(字段名*1) from 表名
    select max(字段名/1) from 表名select max(cast(字段名 as float)) from 表名这些都差不多意思
      

  2.   

    如果字段是字符型,我建议更改为如下:select max(cast(字段名 as decimal(18,2))) from 表名 where ISNUMERIC(字段名) = 1
      

  3.   

     declare @s varchar(100)
    set @s = '99'select @s,@s+0,SQL_VARIANT_PROPERTY ( @s , 'BaseType' )
    ,SQL_VARIANT_PROPERTY ( @s+0 , 'BaseType' )---------------------- ----------- ---------------- -----------------------------------
    99                 99          varchar                         int(1 行受影响)
      

  4.   

     你的字段类型是什么?如果是char,那么max函数是根据字母顺序比较的(99最大),+0系统就自动转换成int型,4567
      

  5.   

    因为你的字段类型是字符串
    字符串比较的时候 '99'比'4567'大
    所以使用字段名+0的形式防止这样的情况发生
    因为 0是 Int类型 字符型的优先级低于INT类型 所以你的字段值首先转化成INT类型然后加0 
    这样的话 4567就比99大了。