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,它也正常工作。:)