select length(to_char(24,'00')) from dual  值怎么为3??应该是2把  

解决方案 »

  1.   

    Because the resulf of follwing sql is ' 24':
    select to_char(24,'00') from dual;You can use another method:
    select lengthb(to_char(24)) from dual;
      

  2.   

    http://www.itpub.net/thread-404943-1-1.html  可以参考这个然后看看这四个的结果select length(trim(to_char(24,'00'))) from dual 
    select length(to_char(24,'00')) from dual 
    select to_char(24,'00') from dual
    select to_char(24,'fm00') from dual 
      

  3.   

    select to_char(-24,'00') from dual
    这个去试试 你就知道为什么了
      

  4.   

    select length(to_char(-24,'00')) from dual  --3
    select to_char(-24,'00') from dual -- '-24'
    --也是3,难道是隐藏符号位?
      

  5.   

    -- 是的,前面有个空格(如果是负数,空格就变量成减号,主要是to_char()函数格式化的问题引起滴。
    -- 例如:select to_char(-24,'00') from dual;则显示为:
    -24-- 估计这个空格是预留的符号位。
      

  6.   

    -- 请参考:
    http://www.cnblogs.com/lyzxx/archive/2007/06/15/784902.html
      

  7.   

    -- 可以多去测试一下:
    -- 当没有小数部分时:
    select length(to_char(-24)) from dual;-- 当小数部分为全0时:
    select length(to_char(-24.0000)) from dual;-- 当小数部分为有数值,但最后N位是0时:
    select length(to_char(-24.0010)) from dual;