locate(substr,str,pos)函數是返回子串 substr 在字符串 str 中第一次出現的位置,如果子串 substr 在 str 中不存在,返回值為 0,REPLACE(str,from_str,to_str)替換字串,str為源字串,from_str為將要被替換的字串,to_str為目的字串.
有關mysql中的locate函數可以查看該鏈接:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
有關mysql中的replace函數可以查看該鏈接:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace
以上便是今天我們要介紹使用的兩個函數.
使用背景:
條件:field_data_body 表的body_value值中有這樣一個規律的字符串"/eapdomain/UserFiles/1073/File/"、"/eapdomain/UserFiles/1073/File/",其中1073是用戶id。不要驚訝為什么會有這樣的路徑!
目的:body_value中所有的符合上述規律的字符串替換為 "/sites/default/files/old/image/","/sites/default/files/old/file/"。
難點:數據量略大4千條數據,不可能手動更改,每條數據中可能存在著不止一個這樣的路徑或者不存在,用戶id為變動的,不能確定.
直接操作數據庫吧,在Navicat中,打開你的數據庫命令行工具,不限于此工具,輸入以下的命令進行替換工作.
替換包含image的字符串:
- UPDATE field_data_body set body_value = replace(body_value, substring(body_value, locate('/eapdomain/UserFiles/', body_value),locate('/Image/', body_value)+7-locate('/eapdomain/UserFiles/', body_value)),'/sites/default/files/old/image/') --Vevb.com
替換包含file的字符串:
- UPDATE field_data_body set body_value = replace(body_value, substring(body_value, locate('/eapdomain/UserFiles/', body_value),locate('/File/', body_value)+6-locate('/eapdomain/UserFiles/', body_value)),'/sites/default/files/old/file/')
能夠實現該目的的方法會很多,歡迎大家在下邊留言.
新聞熱點
疑難解答