有谁知道为什么这些:
SELECT RTRIM('123R_CLUSTER', '_CLUSTER') -- should give '123R'
FROM DUAL;
SELECT RTRIM('123S_CLUSTER', '_CLUSTER') -- should give '123S'
FROM DUAL;
SELECT RTRIM('123T_CLUSTER', '_CLUSTER') -- should give '123T'
FROM DUAL;
SELECT RTRIM('123U_CLUSTER', '_CLUSTER') -- should give '123U'
FROM DUAL;
返回'123'而不是预期的?
我使用的是Oracle Database 12c企业版12.1.0.2.0版 - 64位生产版。
当你尝试这些时,乐趣就开始了:
答案 0 :(得分:3)
文档很清楚:
Oracle / PLSQL RTRIM函数从字符串的右侧删除所有指定的字符。
因此,它不会删除字符串末尾的字符串 _CLUSTER
- 它会移除字符,直到有一个字符不是_,C,L ,U,S,T,E或R.由于你的后缀是R / S / T / U,它们也匹配rtrim
条件,并被删除。和123S_SLURTE
一样,例如。
作为一个更容易理解的例子,
rtrim('LK_123aababaabbbababbaa', 'ab') // returns LK_123
rtrim
根本不是手头工作的工具:)
答案 1 :(得分:0)
如果你想知道如何轻松地做到这一点,试试这个:
SELECT regexp_substr('123R_CLUSTER', '^(.*)_CLUSTER$', 1, 1, null, 1) from dual
union all
SELECT regexp_substr('123S_CLUSTER', '^(.*)_CLUSTER$', 1, 1, null, 1) from dual
union all
SELECT regexp_substr('123T_CLUSTER', '^(.*)_CLUSTER$', 1, 1, null, 1) from dual
union all
SELECT regexp_substr('123U_CLUSTER', '^(.*)_CLUSTER$', 1, 1, null, 1) from dual;
产量
REGEXP_SUBST
------------
123R
123S
123T
123U
并解读功能
regexp_substr(
'123T_CLUSTER', -- source_field
'^(.*)_CLUSTER$', -- regular expression
-- to capture all characters from start of
-- data up to "_CLUSTER"
1, -- start looking at position 1 of string
1, -- which occurance to return
null, -- used for match behaviour
1) -- return what is in first set of parentheses