【发布时间】:2015-03-19 16:58:34
【问题描述】:
注意:这是最终答案,理想情况下我们不应该更新原始问题,感谢 Alex P 指出。
我们如何在 Oracle 中使用 substr 时使用多个大小写?
Table (T1):
Hostname Value
H1 oracleDB1 (local x)
H2 oracleDB2 (local y)
H3 congo/db/abc
H4 congo/db/def
H5 other/rsync
Query: *SELECT hostname,
CASE
WHEN value like ('%oracle%')
THEN substr(value, 7,instr(value, ' ')-7) // get value = DB1, DB2..
WHEN value like ('%congo%')
THEN value = 'congo' //get value = congo
ELSE
substr(value, 1,5) // get first 5 character
END AS value
FROM T1;*
Expected Result:
H1 DB1
H2 DB2
H3 congo
H4 congo
H5 other
我认为我的第一个 substr 是错误的,因为它给了我 oracleDB1 而不仅仅是 DB1,有人可以正确处理这个问题吗?
【问题讨论】:
-
那么你的第一个 substr 总是从字符 1 开始,而不是在 'oracle' 部分之后;不过,您的相似条件在两端都是通配符,所以您是否也期待更复杂的东西,例如“x oracleDB3 y”?为什么你的第二个 substr 有 instr 调用,而不是固定值 5?你真的想要五个字符,还是第一个 / 之前的所有字符?
-
感谢 Alex,对于第一个 substr,我尝试从第 7 个字符开始,直到它到达空白空间样本数据“oracleDB1 (local x)”,对于第二个 substr,我想我可以使用 substr(value, 1,5)
-
好的,但是您当前是从第一个字符开始的,因为您将第二个参数指定为 1 而不是 7?
-
哦,是的,已将其更新为 7,如何限制到空白空间?目前它一直持续到最后,得到“DB1(LOCA”而不是“DB1”
-
value v后面也少了一个逗号。