如何在 DB2 中找到指定一個字串在另一個字串內第一次出現的起始位置

指令為:LOCATE
LOCATE 函數返回一個字串在另一個字串中第一次出現的起始位置。如果沒有找到搜索字串,並且參數都不為空,則所得的結果是零。如果找到搜索字串,則所得結果是一個從 1 到原字串實際長度之間的一個數字。如果指定了可選的起始位置,則表明它是原字串中開始進行搜索的字元位置。可以指定一個可選的字串長度單元來指明在哪些單元中表示函數的起始位置和結果。

ex:
select a.billno,a.bizno,a.transvchrdate,a.transvchrno,a.payvchrdate,b.srlno, b.disbpurname,b.ntamtbtax,b.invoiceno,a.payvchrno,
case when locate('工令單號:',rtrim(b.disbpurname)) <> 0 then
substr(rtrim(b.disbpurname),locate('工令單號:',rtrim(b.disbpurname)),length(rtrim(b.disbpurname)) - locate('工令單號:',rtrim(b.disbpurname)))
when locate('扣款清單:',rtrim(b.disbpurname)) <> 0 then
substr(rtrim(b.disbpurname),locate('扣款清單:',rtrim(b.disbpurname)),length(rtrim(b.disbpurname)) - locate('工令單號:',rtrim(b.disbpurname)))
else '' end as desc1
from db.tbfc01 a,db.tbfc44 b where a.processdate >= '20080701' and a.billdept = 'M11' and a.stuscode is not null
and ltrim(a.stuscode) <> '' and (a.vchrdesc like '雜項報支項目:5%' or a.vchrdesc like '雜項報支項目:6%')
and a.compid = b.compid and a.billno = b.billno
and (rtrim(b.disbpurname) like '%工令單號:%' or rtrim(b.disbpurname) like '%扣款清單:%')
order by a.processdate,a.billno,b.srlno

PS: 這個 LOCATE 與 MS-SQL or ORACLE 中的 INSTR 是一樣的!
arrow
arrow
    全站熱搜

    joy0216tw 發表在 痞客邦 留言(0) 人氣()