假设数据库的数据如下:  NO
  12
  2A
  30B
  5E
  8D 现在希望能够获取5到12的号码,那么5E,8D,12都符合要求,NO的字段类型是VChar,怎么写查询语句才能够查到正确的NO呢?如果当字符串那样比较是肯定不行的,不知道有什么好办法?请各位高手指点,谢谢

解决方案 »

  1.   

    SELECT * FROM TABLE_NAME
    WHERE TO_NUMBER(TRANSLATE(UPPER(NO),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1')) >=5 AND 
          TO_NUMBER(TRANSLATE(UPPER(NO),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1'))<=12
      

  2.   

    补充一下,NO还有可能取值为 5-30B 之类的包含“-"的,就是想要截取出“-"之前的值来进行比较,如果没有"-"而有字母的,就要把字母前面的截取出来作比较这个查询语句应该怎么写?
      

  3.   

    SELECT * FROM TABLE_NAME
    WHERE TO_NUMBER(TRANSLATE(UPPER(substr(no, 1, decode(instr(no, '-'), 0, length(no), instr(no, '-')-1))),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1')) >=5 AND
    TO_NUMBER(TRANSLATE(UPPER(substr(no, 1, decode(instr(no, '-'), 0, length(no), instr(no, '-')-1))),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1'))<=12用 substr(no, 1, decode(instr(no, '-'), 0, length(no), instr(no, '-')-1)) 替换 NO