我的数据集看起来像这样:
A6177PE
A85506
A51SAIO
A7918F
A810004
A11483ON
A5579B
A89903
A104F
A9982
A8574
A8700F
我需要找到所有非数字的ENDings。在这个例子中,这意味着PE,AIO,F,ON,B和F.
在伪代码中,我想象我需要像
这样的东西SELECT DISTINCT X FROM
(SELECT SUBSTR(COL,[SOME_CLEVER_LOGIC]) AS X FROM TABLE);
有什么想法吗?我可以在不学习regexp的情况下解决这个问题吗?
编辑:为了澄清,我的数据集比这个例子大很多。另外,我只对数字部分之后的字符串部分感兴趣。如果字符串是“A6177PE”,我想要“PE”。
答案 0 :(得分:3)
免责声明:我不了解Oracle SQL。但是,我认为这样的事情应该有效:
SELECT DISTINCT X FROM
(SELECT SUBSTR(COL,REGEXP_INSTR(COL, "[[:ALPHA:]]+$")) AS X FROM TABLE);
REGEXP_INSTR(COL,“[[:ALPHA:]] + $”)应该返回字段末尾第一个字符的位置。
答案 1 :(得分:2)
为了便于阅读,我建议使用REGEXP_SUBSTR功能(如果当然没有性能问题,因为这肯定比接受的解决方案慢)。
...也类似于REGEXP_INSTR,但它没有返回子串的位置,而是返回子串本身
SELECT DISTINCT SUBSTR(MY_COLUMN,REGEXP_SUBSTR("[a-zA-Z]+$")) FROM MY_TABLE;
(:alpha:也支持,正如@Audun写的那样)
答案 2 :(得分:1)
例如
SELECT SUBSTR(col,INSTR(TRANSLATE(col,'A0123456789','A..........'),'.',-1)+1)
FROM table;