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

2021-05-23 03:24:00 字數 1339 閱讀 4429

在涉及資料庫操作的工作中,我們常會遇到對

2個字串進行等值比較而非模糊查詢:例如比較

2個姓名是否相等?但操作人員在將字串錄入系統的時候,可能會錄入空格,或者是

tab健(我把這樣的看起來像空格,可能實際上並不是空格的字元稱為類空格字元),這樣在比較的時候肯定是不等的。怎麼辦?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 bh=』***』;

用這個辦法會去掉一些真正的

tab鍵空格,然後採取批量更新的辦法。3.

但我遇到的情況沒有這麼幸運,沒能去掉類空格鍵。怎麼辦呢?我決定嘗試先取得這個類空格鍵的

ascii

碼值,然後再用

chr(ascii碼值)

的方法來處理。

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

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

select replace(xm, chr(

第②步求得的ascii碼值

) ) from table_name where bh=』***』;

問題得以解決。但我發現,上述第

②步求得的ascii碼值為41377,這應該是乙個漢字的ascii碼值,看起來又像空格,於是我懷疑,會不會是中文狀態下的空格鍵、tab鍵?嘗試之後發現不是。我又懷疑,是不是全形、半形的區別?因為我們一般輸入字元,是在半形下輸入的。我按照第一步「1.

首先是去除空格在進行比較……」嘗試,輸入全形下的空格,進行查詢,結果驚喜出現,原來所有未剔除掉的類空格,是全形狀態下輸入的空格,並接證實了全形下輸入的空格,其

ascii

碼值為41377。

最後發現,殺雞用了牛刀,因為問題很簡單。但採用第

3.提到的先取得ascii碼值再來進行剔除的方法,具有通用性!

Oracle資料庫中修改表結構SQL

增加乙個列 alter table 表名 add 列名 資料型別 例如 alter table terminal add terminal num 1 number 11,2 default 0.00,terminal num 2 number 11,2 default 0.00 修改乙個列的資料型...

如何在Oracle中複製表結構和表資料

1.複製表結構及其資料 create table table name new as select from table name old 2.只複製表結構 create table table name new as select from table name old where 1 2 或者 ...

如何在Oracle中複製表結構和表資料

如何在oracle中複製表結構和表資料 1.複製表結構及其資料 create table table name new as select from table name old 2.只複製表結構 create table table name new as select from table na...