首頁 >電腦教學 >電腦知識 >解決Oracle中CHAR類型資料中空格問題的方法是什麼?

解決Oracle中CHAR類型資料中空格問題的方法是什麼?

WBOY
WBOY轉載
2024-01-15 18:21:16961瀏覽

解決Oracle中CHAR類型資料中空格問題的方法是什麼?

有什麼方法可以將oracle中CHAR類型資料中的空

可以用腳本把CHAR型別欄位全部轉換成VARCHAR2型,同時截斷字串的空格,如下:

declare

begin

for c in (select *

from user_tab_columns t1

where t1.DATA_TYPE = 'CHAR'

) loop

execute immediate 'alter table ' || c.table_name || ' add g_w_' || c.column_name || ' varchar2(' || c.char_length || ')';

execute immediate 'update ' || c.table_name || ' set g_w_' || c.column_name || ' = ' || c.column_name;

execute immediate 'update ' || c.table_name || ' set ' || c.column_name || ' = null';

execute immediate 'alter table ' || c.table_name || ' modify ' || c.column_name || ' varchar2(' || c.char_length || ')';

execute immediate 'update ' || c.table_name || ' set ' || c.column_name || ' = trim(g_w_' || c.column_name || ')';

execute immediate 'alter table ' || c.table_name || ' drop column g_w_' || c.column_name;

end loop;

end;

如何移除Oracle庫表結構中的類別空格字元

1.首先是去除空格在進行比較(例如,把姓名中的所有空格去除):

Update table_name set xm=replace(xm , ' ') ;

如果要尋找哪些記錄含有' ',可用相關的語句來尋找。

然後可進行比較。

2.但是我們可能會發現,有些名字中間或末尾還有類似空格的字符沒被去掉,但它們顯然已經不是一般的空格了,那麼懷疑是Tab健作怪。於是參考網路上說的去掉TAB鍵的辦法來處理,用chr(9)來取代空白鍵(TAB鍵的ASCII值為9)。先取一條有類別空格字元的記錄來做實驗:

SELECT replace(xm, chr(9) ) from table_name where;

用這個辦法會去掉一些真正的Tab鍵空格,然後採取批次更新的辦法。

3.但我遇到的狀況沒有這麼幸運,沒能去掉類別空白鍵。怎麼辦呢?我決定嘗試先取得這個類別空格鍵的ASCII碼值,然後再用chr(ASCII碼值)的方法來處理。

①.取得含類空格鍵整個字串的長度 length(),從而確定出類別空格鍵在字串中的起始位置、類別空格鍵的長度。

②.出類別空白鍵的ASCII碼值:ascii(substr(xm,n,m)); n為類別空白鍵的起始位置;m為長度。

③.SELECT replace(xm, chr(第②步得的ASCII碼值) ) from table_name where;

問題得以解決。但我發現,上述第②步得的ASCII碼值為41377,這應該是一個漢字的ASCII碼值,看起來又像空格,於是我懷疑,會不會是中文狀態下的空格鍵、TAB鍵?嘗試之後發現不是。我又懷疑,是不是全角、半角的差別?因為我們一般輸入字符,是在半角下輸入的。我按照第一步「1.首先是去除空格在進行比較…」嘗試,輸入全角下的空格,進行查找,結果驚喜出現,原來所有未剔除掉的類空格,是全角狀態下輸入的空格,並接證實了全角下輸入的空格,其ASCII碼值為41377。

以上是解決Oracle中CHAR類型資料中空格問題的方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:docexcel.net。如有侵權,請聯絡admin@php.cn刪除