表table中有title 字段,title为varchar2(400)型,若title小于30个字符,则全部输出,若title大于30个字符,则输出前面28个字符 + "...".
求select 语句。

解决方案 »

  1.   

    select decode(sign(length(title)-30),-1,title,substr(title,1,28)||'...')
      from yourTable;
      

  2.   


    SQL> select job from emp;
     
    JOB
    ---------
    CLERK
    SALESMAN
    SALESMAN
    MANAGER
    SALESMAN
    MANAGER
    MANAGER
    ANALYST
    PRESIDENT
    SALESMAN
    CLERK
    CLERK
    ANALYST
    CLERK
     
    14 rows selected
    SQL> select substr(job, 1, 5) from emp where length(job)<=5
      2  union all
      3  select substr(job, 1, 4) from emp where length(job)>5;
     
    SUBSTR(JOB,1,5)
    ---------------
    CLERK
    CLERK
    CLERK
    CLERK
    SALE
    SALE
    MANA
    SALE
    MANA
    MANA
    ANAL
    PRES
    SALE
    ANAL
     
    14 rows selected
      

  3.   


    select decode(sign(length(title)-30),-1,title,substr(title,1,28)||'...')
      from yourTable;
      

  4.   

    有些问题,当title为空的时候,多了"..."
      

  5.   

    select decode(nvl(sign(length(title)-30),-1),-1,title,substr(title,1,28)||'...')
      from yourTable;
      

  6.   

    select case when length(a) <= 30 then a
    else substr(a, 1, 28) || '...'
    end a
      from 
      (
       select 'abcdefghijklmnopqrstuvwxyz28--aaaaaaadd' a
         from dual
        union all
       select 'abcdefghijklmnopqrstuvwxyz2830' a
         from dual
        union all    
       select 'abcd' a
         from dual
      ) t
      

  7.   

    select 
    decode(title,length(title)<30,title,substr(title,1,28)||'...')
    from table
      

  8.   

    这个问题最终是用case when去表达比较清晰.
      

  9.   

    select decode(sign(length(title)-30),-1,title,substr(title,1,28)||'...') as title
      from Table;
      

  10.   

    楼主说title是varchar2(400),那length(title)因该是400才对,而不管title里值到底有多长~因此,楼上全部语句都被推翻~~
      

  11.   

    不好意思,是char才是那样,我自己搞错了~~呵呵
      

  12.   

    select decode(nvl(sign(length(title)-30),-1),-1,title,substr(title,1,28)||'...') 
      from yourTable; 
    这个语句是没有问题的。
    建议试下。