比如字段的值是SMMAL_220_01HR_20110620_014_000.xml,我想取到20110620,该如何写sql语句呢?需要用什么样的函数?

解决方案 »

  1.   

    错了,是要在where子句中如何写?select Filename as 文件名, ERRORTXT as 文件是否存在 from SAFEERROR where Filename like '%HR%' AND TIME_ID > getdate()比如TIME_ID的值是SMMAL_220_01HR_20110620_014_000.xml,如何取出20110620并和getdate()进行比较呢?
      

  2.   

    前面的底线数量是一样多的么?如果有规则  就是用  instr找到 时间前面那个底线的位置  然后substr
      

  3.   

    能确定,但是subst不仅要在select后面写,而且要在where后面的字段里用select Filename, SUBSTR(Filename, 16,8) as time_x from SAFEERROR where time_x<getdate()
      

  4.   

    上面的sql语句执行时出错误了
      

  5.   

    用instr函数返回第三个'_'的位置 然后再截取
      

  6.   


    --自己替换下字符串。
    [SYS@myorcl] SQL>SELECT SUBSTR('SMMAL_220_01HR_20110620_014_000.xml',
      2                INSTR('SMMAL_220_01HR_20110620_014_000.xml', '_', 1, 3) + 1,
      3                INSTR('SMMAL_220_01HR_20110620_014_000.xml', '_', 1, 4) -
      4                INSTR('SMMAL_220_01HR_20110620_014_000.xml', '_', 1, 3) - 1) C
      5    FROM DUAL
      6  ;C
    --------
    20110620
      

  7.   

    如果文件名格式固定
    select Filename as 文件名, ERRORTXT as 文件是否存在 from SAFEERROR where Filename like '%HR%' AND SUBSTR(Filename, 16, 8) > getdate()
      

  8.   

    SELECT substr('SMMAL_220_01HR_20110620_014_000.xml',instr('SMMAL_220_01HR_20110620_014_000.xml','_',1,3)+1,8) as cdate from dual;CDATE
    ----------------
    20110620