有規律欄位的拆分

2021-08-25 03:34:51 字數 2778 閱讀 7807

在很多的時候,我們會經常遇到將資料庫的某乙個字段拆分的問題,當然前提條件是字段的資訊是有規律的,比如說乙個字段存在 這樣的資訊「aaaaa,bbbbb,ccccc,zzzz,tttt」,需要你將其根據「,」分開後,然後將所有資料放入另外乙個表中。

其實這就是乙個典型的charindex函式的應用。

我們先看看聯機幫助怎麼說的:

以下來自聯機幫助

charindex

返回字串中指定表示式的起始位置。

語法charindex ( e­xpression1 , e­xpression2 [ , start_location ] )

引數e­xpression1

乙個表示式,其中包含要尋找的字元的次序。e­xpression1 是乙個短字元資料型別分類的表示式。

e­xpression2

乙個表示式,通常是乙個用於搜尋指定序列的列。e­xpression2 屬於字串資料型別分類。

start_location

在 e­xpression2 中搜尋 e­xpression1 時的起始字元位置。如果沒有給定 start_location,而是乙個負數或零,則將從 e­xpression2 的起始位置開始搜尋。

返回型別

int注釋

如果 e­xpression1 或 e­xpression2 之一屬於 unicode 資料型別(nvarchar 或 nchar)而另乙個不屬於,則將另乙個轉換為 unicode 資料型別。

如 果 e­xpression1 或 e­xpression2 之一為 null 值,則當資料庫相容級別為 70 或更大時,charindex 返回 null 值。當資料庫相容級別為 65 或更小時,charindex 僅在 e­xpression1 和 e­xpression2 都為 null 時返回 null 值。

如果在 e­xpression2 內沒有找到 e­xpression1,則 charindex 返回 0。

示例第 乙個**示例返回序列」wonderful」在 titles 表的 notes 列中開始的位置。第二個示例使用可選的 start_location 引數從 notes 列的第五個字元開始尋找」wonderful」。第三個示例顯示了當 e­xpression2 內找不到 e­xpression1 時的結果集。

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)

createtable #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 以下的討...