Oracle LTRIM尝试了太多的特征

时间:2017-11-05 10:04:40

标签: oracle oracle11g

我正在尝试使用LRTIM来获取字符串的一部分。

这是我正在使用的代码。

SELECT
C.MANUFACTURER,
C.MODEL_GROUP,
LTRIM(C.VARIANT, C.MANUFACTURER || ' ' || C.MODEL_GROUP), "VAR DESC"
C.VARIANT
FROM STD_BI.RL2_CONTRACTS_VW C

这就是我明智的地方

VARIANT
AUDI A3 DIESEL SPORTBACK 2.0 TDI SE Technik 5dr Manual 150

MANUFACTURER 
AUDI

MODEL_GROUP
A3

这是我得到的结果

MANUFACTURER  MODEL_GROUP   VAR DESC

AUDI          A3            ESEL SPORTBACK 2.0 TDI SE Technik 5dr Manual 150    

它正在切断DIESEL的前2个字符,问题是在所有情况下都没有发生这种情况。有时它会切断一个角色,有时甚至没有!

我已经考虑了实现这一目标的其他方法,即查找空格,但是有其他制造商和模型组有多个空格,所以试图从VARIANT字段中减去MANUFACTURER和MODEL_ROUP(字符串)

任何关于为什么会发生这种情况的想法或其他实现这一目标的建议都将不胜感激。

非常感谢,

基思

道歉似乎是编辑正在重新格式化我得到的结果

Oracle query result

2 个答案:

答案 0 :(得分:0)

LTRIM的第二个参数是一组单个字符,而不是一系列字符。在您的示例中,数据库从左侧删除字符,直到遇到不在('A','U','D','I','A','3')中的第一个字符,即{{1 } E

要从字符串DIESEL中删除前缀p,请使用

之类的内容
s

在你的情况下扩展到

case when SUBSTR(s,1,LENGTH(p))=p then SUBSTR(s,LENGTH(p)+1) else s end

答案 1 :(得分:0)

您可以REGEXP_REPLACE使用'^' - 表示字符串的开头。

SELECT
C.MANUFACTURER,
C.MODEL_GROUP,
REGEXP_REPLACE(C.VARIANT, '^'||C.MANUFACTURER || ' +' || C.MODEL_GROUP) "VAR DESC",
C.VARIANT
FROM STD_BI.RL2_CONTRACTS_VW C