语句如下:SELECT LTRIM('1092002081100058424', '109') FROM dual
UNION ALL
SELECT LTRIM('1091000000002671251', '109') FROM dual运行结果如下:1 2002081100058424
2 2671251问题:为什么截断的效果不一样呢???理想中应该是如下才对啊。1       2002081100058424
2       1000000002671251

解决方案 »

  1.   

    --Ltrim 函数现实c1匹配前面开始去掉出现在c2的中任何前导字符集
      

  2.   

    试了下,
    SELECT LTRIM('1092002081100058424', '1092') FROM dual
    UNION ALL
    SELECT LTRIM('1091000000002671251', '109') FROM dual
    结果得到
    1 81100058424
    2 2671251
    ,可看,ltrim是把开头是1 0 9 的都截了,而不是整个字符串截的
      

  3.   

    我又试了几种情况SELECT LTRIM('1092002081100058424', '109') FROM dual
    UNION ALL
    SELECT LTRIM('1091000000002671251', '109') FROM dual
    UNION ALL
    SELECT LTRIM('1000000002671251', '1') FROM dual
    UNION ALL
    SELECT LTRIM('1000000002671251', '10') FROM dual结果如下:1 2002081100058424
    2 2671251
    3 000000002671251
    4 2671251谁能再解释一下啊。
      

  4.   

    TO bjt_(bjt)那这个怎么解释呢?SELECT LTRIM('1000000002671251', '1') FROM dual
    UNION ALL
    SELECT LTRIM('1000000002671251', '10') FROM dual结果:1 000000002671251
    2 2671251
      

  5.   

    SELECT LTRIM('9091000000002671251', '109') a FROM dual
    --2671251
    SELECT LTRIM('9091003000002671251', '109') a FROM dual
    --3000002671251
      

  6.   

    SELECT LTRIM('1092002081100058424', '109') t FROM dual
    UNION ALL
    SELECT LTRIM('1091000000002671251', '109') FROM dual
    UNION ALL
    SELECT LTRIM('1091002000002671251', '109') FROM dual----------------
    t
    ----------------
    2002081100058424
    2671251
    2000002671251--可以看出,ltrim函数是从匹配函数开始之后出现在子串中任何字符都
    --被屏蔽掉了
      

  7.   

    可以用replace实现你想要的结果,加上辅助字符,如: 
    SELECT replace(','||'1091000001090002671251', ','||'109','') FROM dual
      

  8.   

    谢谢楼上了。以前一直用 SUBSTR('1091000000002671251', 4, 16) 实现,可是因为字符串的长度每次并不是固定的,所以那个 16 每次都要人工数出来,很麻烦。现在你的方法很好。受你的启发,我又想出一种,不知道哪个效率更好些呢?SELECT SUBSTR('1091000000002671251', 4, LENGTH('1091000000002671251') - 4 + 1) FROM dual;