可以通過replace函數(shù)來獲取特定字符串后,進(jìn)行字段更新實(shí)現(xiàn):

成都創(chuàng)新互聯(lián)公司于2013年開始,先為天峻等服務(wù)建站,天峻等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為天峻企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
sql:update
tablename
set
name=replace(name,'替換前字段','替換后字段')
where
name
like
'%替換前字段%'。
上面的sql語句的意思是替換tablename中name字段的“替換前字段“為”替換后字段“,
where后面的語句是篩選出字段中帶有”替換前字段“的name值。
上面的回答都是對(duì)的,還是多說一句,如果你只是想改最后一個(gè)字符(xx這兩個(gè)字符中也含有“變”不需要改):
udpate
test
set
name
=
substr(name
,1,length(name
)
-
1)
||
'站';
commit;
若確認(rèn)xx兩個(gè)字符不含“變”,或者含的話也要改掉,那么:
update
test
set
name
=
replace(name,'變','站');commit;
轉(zhuǎn)載自寒思國內(nèi)最常用的Oracle字符集ZHS16GBK(GBK
16-bit
Simplified
Chinese)能夠支持繁體中文,并且按照2個(gè)字符長(zhǎng)度存儲(chǔ)一個(gè)漢字。UTF8字符集是多字節(jié)存儲(chǔ),1個(gè)漢字(簡(jiǎn)體、繁體)有時(shí)采用3個(gè)字符長(zhǎng)度存儲(chǔ)。
Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是說UTF8是ZHS16GBK的嚴(yán)格超集。
對(duì)于子集到超集的轉(zhuǎn)換,Oracle是允許的,但是對(duì)于超集到子集的轉(zhuǎn)換是不允許的。一般對(duì)于超集到子集的轉(zhuǎn)換,建議是通過dbca刪除原來的數(shù)據(jù)庫,重新再建庫,選擇正確的字符集,然后導(dǎo)入備份。
我的方案是:先備份數(shù)據(jù),然后強(qiáng)制轉(zhuǎn)換字符集從UTF8到ZHS16GBK,然后導(dǎo)入備份數(shù)據(jù)。如果不行,才來重新建庫,設(shè)置字符集ZHS16GBK,導(dǎo)入備份數(shù)據(jù)。如果這還不行,就把更改字符集從ZHS16GBK到UTF8(這是安全的),再導(dǎo)入備份數(shù)據(jù),恢復(fù)到原始狀況。這樣就有可能避開重新建庫的麻煩。
1.
備份數(shù)據(jù)庫中所有用戶的數(shù)據(jù)
以oracle用戶登陸,執(zhí)行以下命令
#
export
NLS_LANG
=
“SIMPLIFIED
CHINESE_CHINA.UTF8”
保持與數(shù)據(jù)庫服務(wù)器端一致,這樣在exp導(dǎo)出時(shí),就不會(huì)存在字符的轉(zhuǎn)換了,備份最原始的數(shù)據(jù)。
2.
評(píng)估UTF8轉(zhuǎn)換成ZHS16GBK的風(fēng)險(xiǎn)
轉(zhuǎn)換之前,要使用Oracle的csscan工具對(duì)數(shù)據(jù)庫掃描,評(píng)估字符集轉(zhuǎn)換前后,數(shù)據(jù)有可能的損壞情況。如果評(píng)估情況糟糕,那就絕對(duì)要放棄了。
先安裝屬于
CSMIG
用戶的一套表和過程。以oracle用戶登陸UNIX,
#sqlplus
“/
as
sysdab”
SQL@$ORACLE_HOME/
rdbms/admin/csminst.sql
SQLexit
#
$ORACLE_HOME\bin\csscan
-help
可以更清楚如何使用csscan。
#
$ORACLE_HOME/bin/csscan
system/sunday
user=mmsc
FROMCHAR=UTF8
TOCHAR=ZHS16GBK
ARRAY=102400
PROCESS=3
csscan.log
以上命令意思是掃描用戶:mmsc中的所有數(shù)據(jù),從字符集UTF8更改為ZHS16GBK的轉(zhuǎn)換情況。然后得到三個(gè)文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用戶下的所有的數(shù)據(jù)都是可以轉(zhuǎn)換的,并且沒有出現(xiàn)轉(zhuǎn)換“Exceptional”的情況,因此可以更放心一點(diǎn)。
3.
更改數(shù)據(jù)庫的字符集為ZHS16GBK
前面說過,通過命令“Alter
Database
Characeter
Set
XXXX”,實(shí)現(xiàn)從超集到子集的轉(zhuǎn)換,在Oracle是不允許的。但是該命令,提供這樣的命令方式:
Alter
Database
Character
Set
INTERNAL_CONVERT/
INTERNAL_USE
XXXX
這是Oracle的非公開命令。“在使用這個(gè)命令時(shí),Oracle會(huì)跳過所有子集及超集的檢查,在任意字符集之間進(jìn)行強(qiáng)制轉(zhuǎn)換,所以,使用這個(gè)命令時(shí)你必須十分小心,你必須清楚這一操作會(huì)帶來的風(fēng)險(xiǎn)”。
以oracle用戶登陸UNIX,
#sqlplus
“/
as
sysdba”
SQL
SHUTDOWN
IMMEDIATE;
SQL
STARTUP
MOUNT;
SQL
ALTER
SESSION
SET
SQL_TRACE=TRUE;
SQL
ALTER
SYSTEM
ENABLE
RESTRICTED
SESSION;
SQL
ALTER
SYSTEM
SET
JOB_QUEUE_PROCESSES=0;
SQL
ALTER
SYSTEM
SET
AQ_TM_PROCESSES=0;
SQL
ALTER
DATABASE
OPEN;
SQL
ALTER
DATABASE
CHARACTER
SET
ZHS16GBK;
//如果不使用“INTERNAL_USE”參數(shù),系統(tǒng)會(huì)提示出錯(cuò):
//ERROR
at
line
1:
//ORA-12712:
new
character
set
must
be
a
superset
of
old
character
set
SQL
ALTER
SESSION
SET
SQL_TRACE=FALSE;
SQL
SHUTDOWN
IMMEDIATE;
SQL
STARTUP;
此時(shí),檢查一下數(shù)據(jù)庫的字符集是否更改過來
SQL
select
value$
from
props$
where
name=’NLS_CHARACTERSET’;
VALUE$
-----------------
ZHS16GBK
緊接著檢查一下數(shù)據(jù)庫中簡(jiǎn)體中文、繁體中文是否正常,不會(huì)出現(xiàn)亂碼。
SQLselect
spid,spname,spshortname
from
spinfovisual_hk
…...
非常不幸,我看到了一堆亂碼,這也證明了Oracle不支持字符集從超集到子集的更改,當(dāng)時(shí)心里很緊張,很怕失敗,從而恢復(fù)到原樣。
但是根據(jù)以前的驗(yàn)證,把UTF8下的備份導(dǎo)入到ZHS16GBK中去,是OK的,所以繼續(xù)嘗試。
4.
導(dǎo)入備份的用戶數(shù)據(jù)
還是以oracle用戶登陸UNIX,
先刪除庫中的用戶mmsc:
#sqlplus
“/
as
sysdba”
SQLdrop
user
mmsc
cascade;
SQLexit
再運(yùn)行createuser.sql,生成mmsc用戶。
然后使用原來的備份文件,導(dǎo)入到mmsc用戶中:
注意:先設(shè)置NLS_LANG要與當(dāng)前數(shù)據(jù)庫的一致:ZHS16GBK。這樣,導(dǎo)出時(shí)用戶會(huì)話的NLS_LANG為UTF8,與原先的數(shù)據(jù)庫字符集一致;現(xiàn)在為ZHS16GBK,與此時(shí)的數(shù)據(jù)庫字符集一致。這樣,導(dǎo)入時(shí),就會(huì)進(jìn)行字符轉(zhuǎn)換。
#
export
NLS_LANG
=
“SIMPLIFIED
CHINESE_CHINA.ZHS16GBK”
#imp
mmsc/mmsc@mdspdb
file=DSMPD113_user_mmsc.dmp
ignore=y
fromuser=mmsc
touser=mmsc
馬上查看數(shù)據(jù)庫中簡(jiǎn)體、繁體中文,哈哈,沒有亂碼了,一切顯示正常。
緊接著進(jìn)行驗(yàn)證,也證明了:1個(gè)漢字此時(shí)只占用2個(gè)字符長(zhǎng)度。問題解決了!
文章標(biāo)題:oracle怎么換字符,oracle替換字符串
瀏覽地址:http://chinadenli.net/article10/heodgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站策劃、ChatGPT、自適應(yīng)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)