SELECT VINNO
          FROM SRV_ORDER_F
         WHERE right(VINNO,7) = 'G123456' AND NVL(DELETEFLAG, '0') <> '1'为什么会弹出 right  无效的标识符啊?我就是想取VINNO的右7位.

解决方案 »

  1.   

    oracle里没有right函数,用substr吧。
    substr(VINNO,length(VINNO)-7)
      

  2.   

    经测试,应该是substr(VINNO,length(VINNO)-6)
      

  3.   


    我本来是
    SELECT 
          VINNO 
        FROM SRV_ORDER_F 
       WHERE TRIM(VINNO) LIKE '%G123456' 
    但是速度很慢很慢,数据量大,SQL执行的时间已经超过1分钟,
    这样能快些吗?怎么样能更快些呢?
      

  4.   


    你这样肯定很慢,即使有索引,也用不到,前面是匹配,针对TRIM(VINNO),建立反向函数索引吧。
      

  5.   

    LZ建立索引试试:方法 为REVERSE(TRIM(VINNO))建立索引使用时SELECT 
          VINNO 
        FROM SRV_ORDER_F 
      WHERE REVERSE(TRIM(VINNO)) LIKE REVERSE('G123456') || '%'
      

  6.   

    呵呵,函数索引要求比较繁杂,你可以先去看看反向索引吧。道理很简单,就是把字段里的数据,反向组合。
    LIKE '%G123456' 可以改写成LIKE '654321G%'
    这样,就可以用到索引扫描了。
      

  7.   

    右边啊,直接-7就行了substr(VINNO,1,-7)
      

  8.   


     应该是substr(VINNO,-7)