在我的工作中,經常要做資料的匯入匯出,包括在程式上和直接在資料庫上操作。由於客戶提供的資料千差萬別,很可能包含大量特殊的不可見的字元,如果直接匯入到資料庫中,可能會導致應用程式出現問題,或者資料庫查詢時出現意想不到的結果。這時,需要在匯入過程中,把這些「雜質」先過濾掉,再匯入到資料庫中。當然也可以在資料庫中操作,這就視實際情況而定了。
首先,如何在找到這些不可見的字元呢?用眼睛肯定是不行的,複製這些字元放到判斷條件上?行不通。這時,ascii(american standard code for information interchange),即美國標準資訊交換**幫上大忙。
計算機上所有字元都是在ascii基礎上進行擴充套件編碼的,比如英文本元「a」的十進位制編碼是65,中文的「中」字的十進位制編碼是20013。關於ascii編碼,計算機字符集等知識,可上網或查閱相關資料,這裡不再贅述。不過關於資料庫的字符集,也是乙個非常值得**的話題,在以後的文章中再與大家分享下自己的經驗。
從上面的ascii碼值表中得知,十進位制的0至31和127這33個編碼是不可見的特殊字元(控制符)。所以,只要想方法把這些字元替換掉即可。以下是我寫的函式。如果您有更好的方法,請多多指教哈。
1ifobject_id(n'
fn_trim_invisible_code
') is
notnull
2begin
3drop
function
fn_trim_invisible_code
4end5go
678/*
去掉字串的不可見字元,包括去掉字串兩邊的空格*/9
create
function fn_trim_invisible_code(@str
nvarchar(max)='')
10returns
nvarchar(max)11
as12
begin
13declare
@char
nvarchar(max)14
declare
@iint
15set
@char=''
16set@i=
11718while
@i<=
len(@str)19
begin
20set
@char
=@char
+case
when
unicode(substring(@str,@i,1)) <=
31or
unicode(substring(@str,@i,1)) =
12721
then
''22
else
substring(@str,@i,1
) 23
end24
set@i=@i
+125end
26return
rtrim(ltrim(@char
))27
end
1ifobject_id(n'
fn_trim_invisible_code
') is
notnull
2begin
3drop
function
fn_trim_invisible_code
4end5go
678/*
去掉字串的不可見字元,包括去掉字串兩邊的空格*/9
/*如果字串中間的空格也要去掉,把@ucode<=31修改為<=32即可
*/10
create
function fn_trim_invisible_code(@str
nvarchar(max)='')
11returns
nvarchar(max)12
as13
begin
14declare
@char
nvarchar(max)15
declare
@ucode
int16
declare
@str2
nvarchar(max)17
declare
@cnvarchar(1)18
declare
@iint
19set
@char=''
20set
@str2
=rtrim(ltrim(@str
))21
set@i=1
2223
while
@i<=
len(@str2)24
begin
25set@c=
substring(@str2,@i,1)26
set@ucode
=unicode(@c
)
27set
@char
=@char
+case
when
@ucode
<=
31or
@ucode
=127
then
''else
@cend
28set@i=
@i+129
end30
31return (@char)32
end33
go
字串中的不可見字元
最近用datax匯入資料到pipeline的時候,碰到乙個報髒資料的錯誤,檢查後發現字串包含 u0000和 u007f,就以為是這兩個unicode字元搞的鬼,寫了正則 unicode.replaceall s u007f s 來匹配,還是會報髒資料,原始的字串是下面這個樣子的 12345678 u...
EXCEL中的神秘的不可見字元
因處理資料,需要把單位名稱前的空格字元去年,結果只有幾條記錄的去掉了,大部分記錄的單位名稱欄位前的空格沒有去掉。先看下圖 第1列為原資料,第2列為應用公式trim去空格,第3列用substitue函式替換空格 選中a列第3行 山東路 前面的空格 進行替換操作,把這些未知的字元替換成b 黃色記錄的4處...
字串 如何刪除字串中重複的字元
刪除字串中重複的字元,例如,good 去掉重複的字串後就變成 god 第一種方法 蠻力法 最簡單的方法就是把這個字串看作是乙個字元陣列,對該陣列使用雙重迴圈進行遍歷,如果發現有重複的字元,就把該字元置為 0 最後再把這個字元陣列中所有的 0 去掉,此時得到的字串就是刪除重複字元後的目標字串。第二種方...