Oracle 如果无法使用substr/instr拆分,则返回整个字符串
我的数据是这样的Oracle 如果无法使用substr/instr拆分,则返回整个字符串,oracle,Oracle,我的数据是这样的 READINGS ---------- 100 - Hot 200 - Cold 300 - Warm 80 8989970 我只需要像这样返回每行的第一部分 READINGS ---------- 100 200 300 80 8989970 我试过以下方法 SUBSTR(READINGS,0,instr(READINGS,' - ')-1) 但是如果instr()找不到“-”,字段就会像这样变成null READINGS ---------- 100 - Hot 20
READINGS
----------
100 - Hot
200 - Cold
300 - Warm
80
8989970
我只需要像这样返回每行的第一部分
READINGS
----------
100
200
300
80
8989970
我试过以下方法
SUBSTR(READINGS,0,instr(READINGS,' - ')-1)
但是如果instr()找不到“-”,字段就会像这样变成null
READINGS
----------
100 - Hot
200 - Cold
300 - Warm
null
null
关于如何解决这个问题有什么建议吗?您可以使用案例。比如:
CASE WHEN instr(READINGS,' - ') = 0 THEN READINGS
ELSE SUBSTR(READINGS,0,instr(READINGS,' - ')-1) END
Aramillo的答案将比regexp有更好的性能,但是您可以这样做,
regexp\u substr('100','^\d*',1,1)
为什么substr()
的第二个参数是0
?Oracle将其视为1
。是的@davidaber,你是对的,我通常使用1,但OP使用0,它也正常工作。:)