在很多的時候,我們會經常遇到將資料庫的某乙個字段拆分的問題,當然前提條件是字段的資訊是有規律的,比如說乙個字段存在 這樣的資訊「aaaaa,bbbbb,ccccc,zzzz,tttt」,需要你將其根據「,」分開後,然後將所有資料放入另外乙個表中。
其實這就是乙個典型的charindex函式的應用。
我們先看看聯機幫助怎麼說的:
以下來自聯機幫助
charindex
返回字串中指定表示式的起始位置。
語法charindex ( expression1 , expression2 [ , start_location ] )
引數expression1
乙個表示式,其中包含要尋找的字元的次序。expression1 是乙個短字元資料型別分類的表示式。
expression2
乙個表示式,通常是乙個用於搜尋指定序列的列。expression2 屬於字串資料型別分類。
start_location
在 expression2 中搜尋 expression1 時的起始字元位置。如果沒有給定 start_location,而是乙個負數或零,則將從 expression2 的起始位置開始搜尋。
返回型別
int注釋
如果 expression1 或 expression2 之一屬於 unicode 資料型別(nvarchar 或 nchar)而另乙個不屬於,則將另乙個轉換為 unicode 資料型別。
如 果 expression1 或 expression2 之一為 null 值,則當資料庫相容級別為 70 或更大時,charindex 返回 null 值。當資料庫相容級別為 65 或更小時,charindex 僅在 expression1 和 expression2 都為 null 時返回 null 值。
如果在 expression2 內沒有找到 expression1,則 charindex 返回 0。
示例第 乙個**示例返回序列」wonderful」在 titles 表的 notes 列中開始的位置。第二個示例使用可選的 start_location 引數從 notes 列的第五個字元開始尋找」wonderful」。第三個示例顯示了當 expression2 內找不到 expression1 時的結果集。
use pubs
goselect charindex(『wonderful』, notes)
from titles
where title_id = 『tc3218′
go– use the optional start_location parameter to start searching
– for wonderful starting with the fifth character in the notes
– column.
use pubs
goselect charindex(『wonderful』, notes, 5)
from titles
where title_id = 『tc3218′
go下面是第乙個查詢和第二個查詢的結果集:
———–
46(1 row(s) affected)
use pubs
goselect charindex(『wondrous』, notes)
from titles
where title_id=』tc3218′
go下面是結果集。
———–
0(1 row(s) affected)
聯機幫助結束
通過上述的內容可以看出charindex函式的基本用法,我們在通過charindex函式來處理我們的問題:
declare @longstring varchar(50)
declare @firstchar varchar(50)
declare @firstpoint int
declare @lenth int
set @longstring=』aaaaa,bbbbb,ccccc,zzzz,tttt』 —-可以是某乙個表的字段資訊
set @lenth=len(@longstring)
create table #temp_string(fid int identity,content varchar(50))
set @firstpoint=charindex(『,』,@longstring)
while( @firstpoint>0)
begin
set @firstchar=substring(@longstring,0,@firstpoint)
insert into #temp_string(content) values (@firstchar)
set @longstring=substring(@longstring,@firstpoint+1,@lenth)
set @firstpoint=charindex(『,』,@longstring)
endinsert into #temp_string(content) values (@longstring)
select * from #temp_string
drop table #temp_string
結果顯示:
fid content
1 aaaaa
2 bbbbb
3 ccccc
4 zzzz
5 tttt
從而完成了我們的操作,當然你可以將其改為函式,需要注意的是在函式中不能使用臨時表。
有規律欄位的拆分
在很多的時候,我們會經常遇到將資料庫的某乙個字段拆分的問題,當然前提條件是字段的資訊是有規律的,比如說乙個字段存在 這樣的資訊 aaaaa,bbbbb,ccccc,zzzz,tttt 需要你將其根據 分開後,然後將所有資料放入另外乙個表中。其實這就是乙個典型的charindex函式的應用。我們先看看...
有規律的生活
今天我屋的一哥們,早上起來,在客廳裡暈倒了。我從公司借同事的自行車飛也似的回到家,看看他怎麼了,是否要嚴重。我和另一哥們想拉他去東昇醫院檢查,他拒絕了。他說休息一下就好了。他很瘦,體重不到100斤,170的身高。生活節儉,但沒有規律,晚上熬夜,白天起的晚。這些我推測是他暈倒的根本原因。自己不在意自己...
TEXT欄位是否有必要拆分成獨立表?
最近不止一次的被問及這麼乙個問題 乙個含有text欄位的寬表,是否有必要把text拆分出去作為乙個獨立的表,來提高效能?下面談談我個人的看法 一般來說,將text欄位,從一張操作頻繁的表中拆分出去,成為乙個key value結構的獨立表是 好處頗多的。其有利之處主要體現在下面三個方面 ps 以下的討...