最近有個朋友提到如何使用sql來刪除一個字段中部分內容,於是就寫了這篇文章,簡單記過:
測試表如下:
復制代碼 代碼如下:
CREATE TABLE `t` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`domain` tinytext,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
插入測試內容:
復制代碼 代碼如下:
INSERT INTO t(domain) VALUES ('j054,j020,mc032,her302')
替換表內容:
復制代碼 代碼如下:
UPDATE t SET domain = (REPLACE(domain, ',her302', '')) WHERE id = 1
查看替換結果
set @前綴='img.youacom/' ;
select concat(@前綴,SUBSTRING_INDEX(imgurl ,'/',-1)) imgurl from ly_img ;
設 ①字段名為 A;②要替換當前表中所有記錄的A字段中包含的所有"中國人"為"中國";則:
REPLACE A WITH STRTRAN(A,"中國人","中國") ALL
請參考VF幫助:
① REPLACE FieldName1 WITH eExpression1 [ADDITIVE] [, FieldName2 WITH eExpression2 [ADDITIVE]] ... [Scope] [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias]
將nWorkArea|或cTableAlias指定的表中的字段FieldName1 [,FieldName2]...內容[分別]替換為表達式eExpression1 [eExpression2]...的值;[ADDITIVE] 僅用於備注字段,表示將eExpression的內容追加到備注字段尾部;[Scope]指定替換記錄范圍,可以是ALL或NEXT nRecords或REST或RECORD nRecordNumber,缺省值是當前記錄(NEXT 1);[FOR lExpression1]、 [WHILE lExpression2]指定進行替換的條件,在[Scope]范圍內只要lExpression1、lExpression2 的結果為真,REPLACE操作就將進行。
② STRTRAN(c1, c2 [, c3] [, n1] [, n2])
將c1中的c2替換為c3;替換從c1中第n1個c2開始,連續替換n2次。c1、c2、c3可以是字符表達式或備注字段;c3的缺省值是空字符串;n1的缺省值是1;n2的缺省值是從n1開始的所有c2