sqlserver資料庫中隱藏字元遇到的坑

2022-09-13 06:51:12 字數 2429 閱讀 9619

最近遇到了sqlserver資料庫中隱藏字串的坑,也是困擾我好久,最後來分享下我的解決辦法。情況是這樣的,需要統計分析某市的考試資料,統計每道題的平均分和得分率,一開始執行拆分統計sql報錯

後面多了很多的小數點,我把題號列印出來一看,確實是5沒有錯,然後使用 len(@id)函式列印出題號id的長度,發現是16,看來是有隱藏字元了。

首先檢視隱藏小數點的ascii碼為46

然後使用replace函式替換隱藏字串,

set @id=replace(@id,char(46),'')
本來以為問題可以解決了,再次執行依舊報錯,隱藏小數點沒有替換掉,上網查了下其他人的解決辦法,基本就是replace函式替換掉了,看來沒有人遇到跟我一樣的情況,這就有點尷尬了。

後面我想,既然替換不掉,那我只擷取我需要的數字不就行了,於是我採用正規表示式的方法擷取數字

set @id=stuff(@id,patindex('%[^0-9]%',@id),1,'')
這次沒有報錯,以為問題解決了,語句執行完之後去檢視表資料,發現插入的全部是null,數字沒有擷取出來,返回去除錯發現 patindex('%[^0-9]%',@id) 返回的是0,根本沒有獲取到數字的位置,這個5竟然不能識別為數字。

最後發現只有substring(@id,1,1) 能截取出想要的資料,但是這個題號不是個位數的,還有兩位數三位數的題號,並且後面的隱藏小數點的長度也不一樣,我沒有辦法獲取隱藏字串出現的位置。經過一番折騰,我的最後解決方法就是迴圈擷取每個字串比對,下面上**

create

function

[dbo

].[fn_getnumber

](@str

varchar(100

))returns

varchar(100

)begin

declare

@return

varchar(100) =

''declare

@temp

varchar(2

)

declare

@isdecimal

int=0;

declare

@isnumber

int=0;

--此方法解決含有小數點隱藏字元,轉換成數字和小數失敗的資料,

while

len(@str) >

0begin

set@temp

=substring(@str,1,1

)

if (@isdecimal=1

and@temp='

.'and@isnumber=1

)

begin

--已經新增了小數點,後面是數字,則不再新增小數點返回資料

break

;

endif (@isdecimal=1

and@temp='

.'and@isnumber=0

)

begin

--已經新增了小數點,後面還是小數點,則刪除小數點返回資料

select

@return

=substring(@return,1,len(@return)-1)

break

;

endif (@temp

between'0

'and'9

')begin

select

@return

=@return

+@temp

if@isdecimal=1

set@isnumber

=1; --

新增了小數點後面是數字,狀態改為1

endset

@str

=substring(@str,2,len(@str

))

--如果是小數點,並且後面還有資料

if (@temp='

.') and (len(@str) >0)

begin

select

@return

=@return

+@temp

set@isdecimal

=1; --

增加了小數點將狀態改為1

endend

return

@return

endgo

然後執行sql的時候呼叫方法,返回需要的數字和小數

set @id=dbo.fn_getnumber(@id);

SQL server 資料庫中的資料操作

sql提供了4種基本操作的語句,它們分別是進行資料的增加 查詢 修改和刪除操作。1.新增操作 sql語句中最常用的用於指定向資料表中插入資料的方法是使用insert語句。insert語句的使用很簡單,他的基本語法格式如下 insert into table name column list valu...

刪除資料庫中資料(SQL Server)

通過sqlcommand類的commandtext方法 為其構造delete語句 與executenonquery實現修改表資料的功能。主要程式程式 如下。首先例項化乙個sqlcommand物件 cmd 然後通過引數sql sql 語句 來夠建cmd物件。最後通過cmd物件的executenonqu...

SQL Server資料庫中怎麼加密資料

為了防止某些別有用心的人從外部訪問資料庫,盜取資料庫中的使用者姓名 密碼 信用卡號等其他重要資訊,在我們建立資料庫驅動的解決方案時,我們首先需要考慮的的第一條設計決策就是如何加密儲存資料,以此來保證它的安全,免受被他人窺測。sql server中有哪一種支援可以用於加密物件和資料?從一開始就討論一下...