多谢了!例如下表,有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语句找出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
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]','')替换掉就行了。
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))
where t.rowid=
(select r from
(select rowid r from t order by ABS(TIME-sysdate) ASC)
where rownum<2)