2016-02-23 58 views
0

我在包含文件路徑的DB2表中有一個字段。該值將是這個樣子:使用SQL-PL更改字段中的文件夾路徑

N:\ Folder1中\文件夾2 \ Folder3 \ Folder4 \ ITP201602

我需要一個存儲過程,這將改變過去的文件夾時間戳,這將顯示爲ITPYYYYMM。 ITP是一個不會改變的佔位符值。這是查看此路徑的其他軟件所要求的。

這裏是我當前的查詢,其工作原理:

CREATE PROCEDURE UPDATE_ITP_DOCUMENT_PATH() 
    LANGUAGE SQL 
    BEGIN 
     UPDATE dbname.tablename 
     SET filepathfield = LEFT(filepathfield, LOCATE('\Folder4\',filepathfield,1)+8) || 'ITP' || CHAR(YEAR(current timestamp)*100 + MONTH(current timestamp)) 
     WHERE idfield = 'idfieldvalue' 
    END 

這裏的問題是,它需要的最後一個文件夾被命名爲「Folder4」。無論最後一個文件夾的名稱如何,我們都希望它能夠正常工作。

SQL PL中有沒有辦法做同樣的事情,而只是在最後一個反斜槓之後應用更改,而不必硬編碼最後一個文件夾名稱?

感謝

+0

請在您運行此存儲過程之前提供更多信息,例如您將要使用的典型值。 –

+0

@IanBjorhovde運行存儲過程之前,該字段中的文件夾路徑將爲: N:\ Folder1 \ Folder2 \ Folder3 \ Folder4 \ ITP201602 – devkev

+0

因此,在您的示例中,存儲過程不會真的改變任何內容,因爲它是目前2016-02? –

回答

0

什麼計數「\」 - 你可以簡單地改變你的語句來

...LOCATE_IN_STRING(filepathfield,'\',1,5)... ? 

這意味着原因是,你的路徑的「深度」是描述和第五「的\ 「這是你正在尋找的人。

+0

邁克爾,有沒有什麼方法可以從右側數第一個而不是從左數第五個?謝謝回覆。 – devkev

+0

是 - 如果您使用-1代替上例中的-1:...'',-1,1) – MichaelTiefenbacher