select max(字段名+0) from 表名请问:为什么要加‘0’

解决方案 »

  1.   

    where a.sid=b.pid+0 请问这句中的+0你知道是什么意思吗?
      

  2.   

    没什么意义
    难道本意是想nvl(sum(column_name),0)
      

  3.   

    max(字段名)中的“字段名”的数据类型是字符型的,“字段名”+ 0后,oracle会隐式的转换成数字型,字符型的最大和数值型的最大,结果是不一样的。
    测试一下:
    create table Test ( a varchar2(20);
    insert into Test(a) 
    select '1' from dual
     union all
    select '2' from dual
     union all 
    select '10' from dual
     union all 
    select '20' from dual
     union all 
    select '4' from dual;
    select * from Test;
    A
    -----------------------
    1
    2
    10
    20
    4select Max(a) from Test;
    Max(A)
    -----------------------
    4select Max(a + 0) from Test;
    Max(A)
    -----------------------
    20
      

  4.   

    max(f1+0)纯粹画蛇添足.
    where f1=f2+0,一般用来避免优化器谓词变换
      

  5.   


    嗯,这种情况也是有的,比如在做sql优化时不想用到某个索引就可以这么处理,当然得根据实际应用。
      

  6.   

    完全的玩弄技巧,max(to_number())不就得了,代码是追求简单,而不是追求所谓的技巧
      

  7.   

    应该是MAX(NVL(字段,0))吧,因为NULL,是不能求最大的
      

  8.   

    为什么:
    select Max(a) from Test;
    Max(A)
    -----------------------
    4
      

  9.   

    varchar2类型的比较规则啊,从左到右顺序比较,发现到大的立马停止,'4'>'20',因为4大于2,停止了
    '12'>'1';因为前面两个1相同,但是第1个长度大于第2个,varchar2类型采用non-padded,而char采用Blank-Padded方式比较,有点不同
      

  10.   

    我觉得应该是为了程序的容错性吧但该字段没值时,能提供一个数字0 而不是null
      

  11.   

    如:str varchar2(10)
    max(str+0),这个str字段必须是字符串类型的数字,如‘3’,‘4’等,
    max(str)是把str转换成ascii码的最大值
      

  12.   

    那请问max(to_number())就比max(a+0)简单了吗?速度会更快吗?在不增加开销,不违背编程规范的前提下,只要能得到正确结果,任何代码都是可以接受的。