我正面臨Oracle SQL的問題substr()
函數。Oracle substr(),隱式轉換?
看起來好像substr()
行爲超出其規定的目的,這樣,
substr(some.field, 0, 7) <> '1598200'
其中
some.field = '1598200, 123456'
即將在這裏發揮作用,
select sum(t.amount)
from ivtransaction t
inner join ivpaymentreminders p on p.transactionid = t.transactionid
left join ivinvoice i on i.invoiceid = t.invoiceid
where substr(p.collectiveinvoiceno, 0, 7) = '1598200'
在p.collectiveinvoiceno
,4條預計將調高:
rownum | p.collectiveinvoiceno
---------------------------------
1 | 1598200
2 | 1598200
3 | 1598200, 123456
4 | 1598200, 456789
但只有1和2行轉起來,並添加到sum(t.amount)
。
- 當自己的測試,
substr(p.collectiveinvoiceno, 0, 7)
提取正確的價值觀 - 轉換使用
to_char
爭論的左右兩側都沒有區別
這是某種形式的隱式轉換?如果是這樣,如何解決它?
感謝任何想法,
英格麗
編輯:事實證明,在SUBSTR(字段,1,7)相比沒有趕上4/4行,因爲目標字符串是在回到第3和第4行,不是領先的。我被愚弄了,因爲在應用程序中,目標字符串顯示爲前導!我是一個初學者,所以這是非常有用的,謝謝你的所有意見。英格麗
也許問題出在另一個地方。 (內部加入ivpaymentreminders)。你也可以用('where'instr(some_value,'1598200')> 0;') –
中的字符串替換爲substr,因此它應該是'substr(p.collectiveinvoiceno,1,7)'。但不確定它是否有助於你的情況,因爲問題也可能在聯結中。刪除你的'WHERE'並檢查你是否得到了所有必要的行。 – Tatiana
從Oracle文檔:當位置爲0(零)時,它被視爲1 – Rene