oracle 怎么从后开始截取字符

如: abcdef 截取后4位
变成 ab
怎么用sql 实现?
因为 后 有可能是 abcd.txt 的名字 所以要截取后面的 4位 只留名字

1、在oracle中经常需要使用到截取字符串函数substr。语法:substr(str,num1,[num2]); 默认情况下都是只需要两个参数,它的意思是从第二个字符开始截取str字符串剩下所有的字符。

2、substr函数中第二个参数也可以是负数,它的使用是从str倒数第num1个字符的位置开始截取。

3、也可以同时使用三个数,它的使用是从num1开始截取str字符,截取num2个字符。如下图,

4、在同时使用三个参数的时候,第二个参数也可以是负数,它的使用就是从str倒数num1的位置的开始截取num2个字符。如下图,

5、不过有一点需要注意的是从num位置开始截取str时,如果num2的参数比较大那么返回的结果也只是返回str从num位置开始最多的字符。完成。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-15
Rtrim(abcdef,cdef)
Rtrim()的功能就是将字符串abcdef右边的cdef去掉,同理,Ltrim(str,par)的功能就是将字符串str右边的par去掉追问

原有文件 是 abcd.TXT 前面的abcd不一定是多少位的 可是后面的.TXT 是确定的 我想把.TXT去掉

追答

那可以啊,前提是你 的abcd.TXT是字符串,假设有一个文件abcd....xyz.TXT用函数Rtrim(abcd....xyz.TXT,.TXT)将.TXT去掉

第2个回答  推荐于2017-09-23
substr( string, start_position, [ length ] )
  参数分析:
  string
  字符串值
  start_position
  截取字符串的初始位置, Number型,start_position为负数时,表示从字符串右边数起。
  length
  截取位数,Number型
  其中,length为可选,如果length为空(即不填)则返回start_position后面的所有字符。
  意思就是:
  从start_position开始,取出length个字符并返回取出的字符串。
  具体参考示例。
  示例:
  SELECT substr('This is a test', 6, 2) FROM dual 返回 'is'
  substr('SyranMo have a dream', -8, 2)
第3个回答  2012-08-15
Select substr('abcdef',1,2) From dual
这个结果就ab
不懂你想要什么结果追问

有可能是 ABCDEF.TXT ,前面的名字不一定多少位 我要把 .TXT截掉

追答

用replace替换.txt吧
Select Replace('ABCDEF.TXT','.TXT') From dual

追问

不行呀 我就怕 文件时 ABCDEF.txt 后面的扩展名是 小写的

小写的话 Select Replace('ABCDEF.txt','.TXT') From dual 这个就查不到了

追答

这样吧
Select substr('ABCDEF.TXT',1,length('ABCDEF.TXT')-4) From dual

本回答被提问者采纳