2014-02-22 76 views
3

我試圖在路徑列中的最後一個/之後替換文本,並使用名稱列中的文本。路徑列中/的數目不是固定的,但是在任何情況下,我只需要在最後一次替換後的文本/MySql替換最後一個/

這樣做的正確方法是什麼?我不是很熟悉,像這樣的事情,並嘗試一些可笑的是清除所有數據:

UPDATE paths 
    SET path = SUBSTRING_INDEX(name,'/', 1); 
    select * from paths; 

當前數據

"name"  "path" 
"microsoft" "/us/software/mscorporation" 

預期結果

"name"  "path" 
"microsoft" "/us/software/microsoft" 
//replace what's after the last `/` with what's in name 

回答

2

只是想提高vooD的回答的最後一個/後取代一切。

UPDATE paths SET path = REPLACE(path, SUBSTRING_INDEX(path, '/', -1), name); 

我的代表處是不夠的評論:P

編輯:查詢的上方有一個bug,例如

us/system/driver/system 

'path will become us/microsoft/driver/microsoft if name's value is microsoft 

所以,這應該正確的查詢:

UPDATE paths SET path = CONCAT(LEFT(path, CHAR_LENGTH(path) - CHAR_LENGTH(SUBSTRING_INDEX(path, '/', -1))),name) 
1

選擇子字符串最後/你可以這樣做:

select substring_index('/us/software/microsoft', '/', -1); 
+--------------------------------------------------+ 
| substring_index('/us/software/microsoft','/',-1) | 
+--------------------------------------------------+ 
| microsoft          | 
+--------------------------------------------------+ 

UPDATE查詢可以是:

UPDATE paths SET path = SUBSTRING(path, 1, LENGTH(path) - LOCATE('/', REVERSE(path))) 
    substring_index(name, '/', -1); 
1

嘗試了這一點。它將與microsoft

UPDATE path SET path = REPLACE(path, SUBSTRING_INDEX(name, '/', -1), 'microsoft'); 
相關問題