由於工作需要,在遷移一批數據時發現一張表的varchar2字段本應該由數字組成,但出現了亂碼。如下圖。
現在就是要把這幾十萬數據中的亂碼數據提取出來。
問了下度娘,他老人家告訴我用這個函數:translate
以下是這個函數的說明 :
http://www.2cto.com/database/201110/109385.html
廢話不多說開工。
1 create table temp_color_group_new as 2 select t.color_group_no, 3 translate(t.color_group_no, '9876543210', ' ') as new_no, 4 t.svc_inst_id 5 from temp_color_group t;
translate(t.color_group_no, '9876543210', ' ') as new_no
這里的color_group_no是可能出現的亂碼字段,
'9876543210':根據實際情況變更,本場景為color_group_no只可能是數字組成,如果有字母的話再加上就好。如果有漢字呢?⊙﹏⊙b汗~~沒研究了,那位有高人有着告訴我一下哈。。學習學習。
' ':這里是個空格,不要定義為空''否則轉換后的新號碼都是null了。。也可以定義成特殊字符如“_”不過,后面轉換稍麻煩點。。
創建好臨時表temp_color_group_new 這個后,再將空格trim掉。
update temp_color_group_new set new_no = trim(new_no) ;
此時new_no字段符合數字規則的應該都變成null了 is not null的都是亂碼數據或者有特殊字符的數據如換行符等。
OK 搞定。。。 高人莫噴。。。