如何判斷oracle資料庫的列中有中文資料

2021-07-16 03:29:17 字數 908 閱讀 3891

1:使用asciistr函式判別
asciistr返回字元的ascii形式的字串。非ascii的字元被轉化為『\***x』的形式。(***x為中文的ascii碼)

使用asciistr函式也是根據非ascii字元會被轉化這個特性來判別中文字元,只要裡面包含中文字元,則必定會有\***這樣的字元。且簡體漢字的編碼範圍是

b0a1 - f7fe.

所以使用asciistr函式來判斷列中否有中文資料,只需要判斷asciistr(column_name)中是否有『\』符號,(注意要與資料本身就有\的區分開);

2:使用convert函式判別

convert函式說明:

convert(inputstring,dest_charset,source_charset)

inputstring:要轉換的字串

dest_charset:目標字符集

source_charset:原字符集

select sname from test where sname <> convert(sname,'zhs16gbk','al32utf8');
3:使用函式length和lengthb來判別

使用函式length與lengthb來判別,是基於中文字元占用2~4個位元組,而ascii字元占用乙個位元組,那麼對比length與lengthb就會不一樣。這樣就能判別欄位中是否包含中文字元,但是跟asciistr一樣,如果裡面的非asci字元包含非中文,它一樣不能判別。依然有取巧嫌疑。

select sname from test where length(sname) != lengthb(sname);

參考資料

oracle 資料庫修改列型別

新增備份字段 alter table acc accitem add back type char 1 備份字段 update acc accitem t set t.al type null t.back type decode al type,1 a 2 l 3 e 4 i 5 p 6 o 7 ...

如何處理oracle資料庫新增列後順序的問題

工作中遇到 在為乙個表新增欄位後,新增欄位在最後,想調整新增欄位的位置。1 原始方法 新建臨時表以儲存正確的順序 create table a 2 as select column1,colum2,a表中的順序 from a 1 刪除表a 1 drop table a 1 新建a 1並從a 2表中賦...

Oracle資料庫批量更新某列資料

先講下我遇到的情況 有一張表a,已經存在乙個欄位該字段是date型別,需求將該字段改為varchar2 型別,我們都知道,oracle在該字段有值情況是不可以更新資料的,如果你不在乎該字段在表中位置變化的話,可以方法一操作 方法一 新增乙個字段,然後把原列資料複製到這個列下,然後把原欄位刪除,把新增...