在另一列中“截断”字符串列?

时间:2013-07-23 01:28:23

标签: sql oracle plsql

我有一个包含String值的列的表。字符串值总是以字母“T”作为最后一个字符结束,空格“”和数字紧跟在字符串后面:

StringColumn
"asdjadhasdT 32 asjashudT 2"
"tytweytwe aweriuhfT 23"
"ajkjsdT 6 asdajkdjkjT 1445"
"kjkasd aaassT 980"

我想在另一栏中获取该号码。

换句话说:

StringColumn                        |    ColumnValues
"asdjadhasdT 32 asjashudT 2"        |    2
"tytweytwe aweriuhfT 23"            |    23
"ajkjsdT 6 asdajkdjkjT 1445"        |    1445
"kjkasd aaassT 980"                 |    980

2 个答案:

答案 0 :(得分:2)

看起来你在'T'之后还有一个空格。这是一种方法:

select StringColumn, substr(StringColumn, 2 - instr(reverse(StringColumn), 'T')) as Values
from . . .

这会在反向字符串中找到'T'的位置,然后从字符串的末尾开始减去两个字符数。

编辑:

with t as (
     select 'asdjadhasdT 32 asjashudT 2' as StringColumn from dual union all
     select 'tytweytwe aweriuhfT 23' as StringColumn from dual union all
     select 'ajkjsdT 6 asdajkdjkjT 1445' as StringColumn from dual union all
     select 'kjkasd aaassT 980' as StringColumn from dual
)
select StringColumn,
       substr(StringColumn, 2-instr(reverse(StringColumn), 'T')) as "Values"
from t;

SQL小提琴是here

第一个版本的问题是Values是Oracle中的保留字,因此查询无法编译。

答案 1 :(得分:0)

我接受了提供的输入字符串 得到'T'的最后一次出现的位置,然后在下面取一个子串是查询:

SELECT StringColumn,Trim(SubStr(StringColumn,INSTR(StringColumn,'T', - 1)+1))FROM test;

谢谢, Koustubh Avadhani