declare @t table(col varchar(100))
insert into @t select 'ab/dd/u3u/kk.txt'
insert into @t select 'ab/dd/yy/ik4.txt'
insert into @t select 'ab/dd/rewew/uiy/uu/ktk.txt'
insert into @t select 'ab/csd/kk.txt'select
    reverse(left(col,charindex('/',col)-1))
from
    (select col=stuff(reverse(col),1,charindex('/',reverse(col)),'') from @t) a/*
col
---------
u3u
yy
uu
csd
*/

解决方案 »

  1.   

    SQL> SELECT * FROM T;A
    --------------------
    ab/dd/u3u/kk.txt
    ab/dd/yy/ik4.txt
    ab/csd/kk.txtSELECT SUBSTR(A,INSTR(A,'/',-1,2)+1,INSTR(A,'/',-1)-INSTR(A,'/',-1,2) - 1) FROM T;
      

  2.   

    子陌红尘 的代码不是Oracle中可用的,看着怪怪的。
      

  3.   

    请教如下问题:
    表t 列的为number类型 存放的是年月日时分秒信息如下:(endTm 有可能为空)
    beginTm          endTm
    -------------------------------
    1136790278828    1138760278828
    1136320278828    
    1131190278828 我想得到每条纪录所花的时间(即endTm 和beginTm的差值)。如果endTm 为空就取当前时间。
    此外能否将这种差值转化成x d x h x m x s(多少天多少小时多少分钟多少秒多少毫秒)的格式显示
    或者类似这样的格式都可以。
      

  4.   

    CREATE OR REPLACE FUNCTION GET_STD_TIME(s IN NUMBER) RETURN VARCHAR2 IS
    BEGIN
    RETURN TRUNC(s/24/60/60)||'天'||TRUNC((MOD(s,24*60*60))/60/60)||'小时'||TRIM(TO_CHAR(TRUNC((MOD(s,60*60))/60),'00')) ||'分'||TRIM(TO_CHAR(MOD(s,60),'00')) ||'秒';
    EXCEPTION
      WHEN OTHERS THEN RETURN NULL;
    END GET_STD_TIME;
    /
      

  5.   

    谢谢,能用一句sql语句来实现这个功能么?
    楼上的能够求两列的时间差么?
    还有第二列的时间有可能是空的.
    如果是空的话我如何取当前系统时间然后在和第一列求时间差.最后用楼上的方法转换成相应的格式!
    能给出更好的sql么?
    谢谢!
      

  6.   

    SELECT TRUNC(s/24/60/60)||'天'||TRUNC((MOD(s,24*60*60))/60/60)||'小时'||TRIM(TO_CHAR(TRUNC((MOD(s,60*60))/60),'00')) ||'分'||TRIM(TO_CHAR(MOD(s,60),'00')) ||'秒' AS tt
    FROM (
    SELECT (NVL(TO_DATE(endTm,'YYYYMMDDHH24MISS'),SYSDATE) - TO_DATE(bgTm,'YYYYMMDDHH24MISS')) * 3600 * 24 AS s FROM T
    );