update go_member set username = replace(username,'非漢字','');
我要替換數(shù)據(jù)庫(kù)中名字,只要名字中不是數(shù)字字母漢字的(就是去掉特殊字符),都替換掉。該如何做???
數(shù)據(jù)庫(kù)是MySQL
光陰似箭催人老,日月如移越少年。
mysql 正則匹配,試試我本地測(cè)試是好的update go_member set username= '' where username not REGEXP '[[:alpha:]]|[0-9]|[a-z,A-Z]'
----謝邀----
思路1(不推薦):笨方法,先把所有數(shù)據(jù)查出來(lái),再對(duì)結(jié)果進(jìn)行過(guò)濾(過(guò)濾非漢字的)數(shù)據(jù)記錄這些數(shù)據(jù)的ID,然后update
思路2(推薦):使用sql的正則表達(dá)式,SQL中也是可以使用正則表達(dá)式的。具體還要看你使用什么數(shù)據(jù)庫(kù),具體數(shù)據(jù)庫(kù)又有不同的語(yǔ)法。這個(gè)具體就看你的情況了,自己Google吧
比如Oracle有這些:regexp_like,regexp_replace,regexp_substr,regexp_instr四個(gè)正則表達(dá)式函數(shù).
例子:
select from emp where regexp_like(ename,'^a[a-z]n$');可以查找ename中以a開(kāi)頭以n結(jié)尾的行
根據(jù)以上解決方案,你可以自己摸索去google吧。。。。希望對(duì)你有幫助。
如果用PHP的話,最好在PHP中用正則來(lái)匹配、過(guò)濾結(jié)果,雖然如樓上所說(shuō),MySQL支持正則查詢(xún)語(yǔ)句,但是效率會(huì)更低。
中文的正則是:/([u4e00-u9fa5])/u
,那么過(guò)濾非中文的正則就是:/([^u4e00-u9fa5])/u
提供個(gè)php utf-8下的漢字正則吧
<?php
$str = "one中國(guó)你好two";
$preg = "/\p{Han}+/u";
$result = preg_replace($preg, '', $str);
var_dump($result);
p小寫(xiě)是匹配漢字,P大寫(xiě)是匹配非漢字