最近遇到了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然後執行sql的時候呼叫方法,返回需要的數字和小數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
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中有哪一種支援可以用於加密物件和資料?從一開始就討論一下...