大虾们,我现在有一个问题,就是要实现一个这样的模糊查询.
字段type 要匹配 800.004.XX ~ 800.010.XX 和 922.xx
xx 表示为任意数字.
就是说只要是符合条件的就读出来.
这条sql语句的该怎么写呢???

解决方案 »

  1.   

    oracle支持正则表达式的,看看怎么用了哦.
    http://www.builder.com.cn/2004/0630/124759.shtml
      

  2.   

    try:
    where  type like '800.004.__' or  type like '800.010.__' or  type like '922.__.__'
      

  3.   

    SELECT 
    B.*
    FROM
    ((SELECT
    A.*,
    TRANSLATE(A.TEMP_A,'0123456789', '9999999999') AS COL1
    FROM TEMP A
    WHERE LENGTH(A.TEMP_A)=10)
    UNION
    (SELECT
    A.*,
    SUBSTR(A.TEMP_A, 0, 4) || TRANSLATE(SUBSTR(A.TEMP_A, 5, 2),'0123456789', '9999999999') AS COL1
    FROM TEMP A
    WHERE LENGTH(A.TEMP_A)=6)) B
    WHERE
    ( SUBSTR(B.TEMP_A, 0, 3) = '800' 
    AND SUBSTR(B.TEMP_A, 4, 1) = '.' 
    AND SUBSTR(B.TEMP_A, 5, 3) >= '004' 
    AND SUBSTR(B.TEMP_A, 5, 3) <= '010' 
    AND SUBSTR(B.TEMP_A, 8, 1) = '.' 
    AND B.COL1 = '999.999.99') OR 
    B.COL1 = '922.99'
      

  4.   

    Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式。
    使用正则表达式,以上问题的处理会更简单