多个 CASE/WHEN 与 substr
Multiple CASE/WHEN with substr
注意:这是最终答案,理想情况下我们不应该更新原始问题,感谢 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
我认为我的 fist substr 是错误的,因为它给我的是 oracleDB1 而不是 DB1,有人可以正确地处理这个问题吗?
您目前正在做:
substr(value, 1, instr(value, ' ') - 1)
它为您提供从第一个字符开始的子字符串,长度为 instr(value, ' '), - 1
个字符。因此对于 oracleDB1 (local x)
,第一个 space 是字符 10,因此您将获得从位置 1 开始的 9 个字符。
如果您只是将起始位置更改为 7 以跳过固定的 'oracle'
部分:
substr(value, 7, instr(value, ' ') - 1)
那么你将从位置 1 开始的 9 个字符,即 DB1 (LOCA
。记住 the third argument is the length,它不是结束位置。所以现在您需要再次考虑固定 oracle
部分的长度,并将您要查找的长度也减少该数量:
substr(value, 7, instr(value, ' ') - 7)
或说明这些值的来源:
substr(value, length('oracle') + 1, instr(value, ' ') - (length('oracle') + 1))
注意:这是最终答案,理想情况下我们不应该更新原始问题,感谢 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
我认为我的 fist substr 是错误的,因为它给我的是 oracleDB1 而不是 DB1,有人可以正确地处理这个问题吗?
您目前正在做:
substr(value, 1, instr(value, ' ') - 1)
它为您提供从第一个字符开始的子字符串,长度为 instr(value, ' '), - 1
个字符。因此对于 oracleDB1 (local x)
,第一个 space 是字符 10,因此您将获得从位置 1 开始的 9 个字符。
如果您只是将起始位置更改为 7 以跳过固定的 'oracle'
部分:
substr(value, 7, instr(value, ' ') - 1)
那么你将从位置 1 开始的 9 个字符,即 DB1 (LOCA
。记住 the third argument is the length,它不是结束位置。所以现在您需要再次考虑固定 oracle
部分的长度,并将您要查找的长度也减少该数量:
substr(value, 7, instr(value, ' ') - 7)
或说明这些值的来源:
substr(value, length('oracle') + 1, instr(value, ' ') - (length('oracle') + 1))