多谢了!例如下表,有SN,CONTENT,TIME 3列数据.
问题1:用SQL语句找出TIME最接近系统时间,SN为aa的一行数据.
问题2:显示CONTENT列的字段中[BEGIN]和[END]之间的内容.SN  CONTENT         TIME
aa  [BEGIN]  … [END] 2008-2-3 5:07:37
aa  [BEGIN]  … [END] 2008-2-3 6:56:50

解决方案 »

  1.   


    SQL> select * from t;SN         CONTENT                                            TIME
    ---------- -------------------------------------------------- ----------
    aa         [BEGIN]123456789[END]                              02-2月 -08
    aa         [BEGIN]DDDDDDD[END]                                03-2月 -08
    aa         [BEGIN]ASDFGHJKL[END]                              05-2月 -08select SN,
     SUBSTR(CONTENT,
               INSTR(CONTENT,
                     '[BEGIN]')+7,
                     (INSTR(CONTENT,'[END]'))-INSTR(CONTENT,'[BEGIN]')-7) CONTENT,
           TIME FROM T WHERE ABS(TIME-sysdate)=(
     SELECT MIN(ABS(TIME-sysdate)) from t);
    SN         CONTENT                                            TIME
    ---------- -------------------------------------------------- ----------
    aa         ASDFGHJKL                                          05-2月 -08
    大概意思,LZ自己看着写写吧,中间取字符串函数比较麻烦,如果begin和end外面没其他字符的话,
    直接用REPLACE((CONTENT,'[BEGIN]',''),'[END]','')替换掉就行了。
      

  2.   

    select t.sn sn, replace(replace(t.content,'[BEGIN]',''), '[END]','')  content, t.time time
    from
    (select 'aa' sn, '[BEGIN]dddddd[END]' content, to_date('2008-2-3 5:07:37', 'YYYY-MM-DD HH24:MI:SS') time from dual
    union
    select 'aa' sn, '[BEGIN]ffffff[END]' content, to_date('2008-2-3 6:56:50', 'YYYY-MM-DD HH24:MI:SS')time from dual
    union
    select 'aa' sn, '[BEGIN]MMMMM[END]' content, to_date('2008-2-3 8:56:50', 'YYYY-MM-DD HH24:MI:SS') time from dual) t 
    where sn = 'aa' and abs(sysdate-time) = (select min(abs(sysdate-time)) from (select 'aa' sn, '[BEGIN]dddddd[END]' content, to_date('2008-2-3 5:07:37', 'YYYY-MM-DD HH24:MI:SS') time from dual
    union
    select 'aa' sn, '[BEGIN]ffffff[END]' content, to_date('2008-2-3 6:56:50', 'YYYY-MM-DD HH24:MI:SS')time from dual
    union
    select 'aa' sn, '[BEGIN]MMMMM[END]' content, to_date('2008-2-3 8:56:50', 'YYYY-MM-DD HH24:MI:SS') time from dual))
      

  3.   

    一条记录select * from t
    where t.rowid=
    (select r from 
    (select rowid r from t order by ABS(TIME-sysdate) ASC)
    where rownum<2)