现有数据表UD40,字段Key1、Character01为varchar类型,
如据如下
Key1               Character01
                   3
10
11
2                  te11s222t
3                  3te11s222t
4                  4te11s222t
5
6
7
8
9
1
最新插入的一条语句Key1为11,
我想找出最新插入的一条语句,用
SELECT MAX(Key1) AS MAX_Key1 FROM UD40
结果应该是
MAX_Key1
11但为何实际却是
MAX_Key1
9

解决方案 »

  1.   

    SELECT MAX(Convert(int,Key1)) AS MAX_Key1 FROM UD40 
      

  2.   

    因为你的Key1为varchar 所以它的排列顺序是字符串排列,不是数字排列,改为int 就可以了。
      

  3.   

    varchar 11 比 varchar 9 小?不是很懂!还请高手说说!
      

  4.   


    你用order by Key1  这样就能看见他们是怎么排序的了,呵呵
      

  5.   

    字符串的大小是按照ascii编码来比较的,字符串的11小于9
      

  6.   

    Key1、Character01为varchar类型, 
    因为是VARCHAR
      

  7.   

    SELECT ASCII('11')
    SELECT ASCII('1')
    SELECT ASCII('9')
                
    ----------- 
    49(所影响的行数为 1 行)            
    ----------- 
    49(所影响的行数为 1 行)            
    ----------- 
    57(所影响的行数为 1 行)
      

  8.   

    因为KEY1字段是VARCHARSELECT MAX(Cast(Key1 as INT)) AS MAX_Key1 FROM UD40
      

  9.   

    恩,key1 字段是Varchar 的缘故..
     13楼的解释很好的说明了这个问题 ,学习...
      

  10.   


    正解  varchar类型是按字符依次进行排列的 11<12<21< 5... < 9
      

  11.   

    顶一个,如果是int型,那就是11了
      

  12.   

    字符比较11小于9
    改字段类型为int
      

  13.   

    把KEY1转化为 convert() int型,然后再用MAX