字串和關係格式的轉化

2022-01-10 09:09:24 字數 2786 閱讀 5814

在資料庫開發過程中,字串和關係表的轉化是一項基本技能。當字串中存在分隔符時,有時將其轉換成關係表資料,和其他資料表進行join查詢,出現這種情況,是因為沒有遵守關聯式資料庫的設計正規化,沒有把字串拆分成原子項儲存,也有可能是資料傳引數;有時會遇到相反的情況,需要將關係表的相關資料拼接成乙個字串顯示,或傳參。

把格式化的字串轉化成關係格式,基本思路分為兩種:

把關係格式轉化成字串,基本思路分為兩種:

一,將字串轉換成表

先把字串轉換成xml格式,再利用xml的nodes()函式,把xml資料轉化成關係資料,這種實現方式效能快,**簡潔,

declare

@separator

varchar(10

)declare

@str

varchar(max

)

set@separator='

,'set@str='

54,57,55,56,59

'

1,把字串轉化成節點值

每個子串都是節點值,只需要取出節點值,就可以把節點值轉化成關係格式的列值

declare

@xml

xmlset

@xml

=convert(xml,''+

replace(@str, @separator, '

') +''

)select ids=n.v.value('

.', '

int'

) from

@xml.nodes('

/v') n(v)

2,把字串轉化成節點屬性

每個子串都是節點的屬性值,只需要取出節點的屬性值,就可以把屬性值轉化成關係格式的列值

declare

@xml

xmlset

@xml

=convert(xml,'

'''+

replace(@str, @separator, '''

>

''') +

'''>')

select ids=n.v.value('

@v', '

int'

) from

@xml.nodes('

/item

') n(v)

3,內建錶值函式(string_split)

sql server 2016 新增乙個錶值函式string_split,用於按照分隔符將字串分割成表值資料,返回的欄位名是value

string_split ( string , separator )

二,將表資料拼接成字串

有以下資料表,有兩列:id和txt,id值有重複,而txt是文字資料;

create

table

dbo.test

(id

int,

txt

varchar(10

))

把id欄位相同的txt欄位的值拼接成字串顯示

select

id ,(

select a.txt+

''from dbo.test a where a.id=t.id for xml path('')) as

descr

from

dbo.test t

group

by id

三,奇巧淫技

在master資料庫中,存在乙個系統檢視:master.dbo.spt_values,該檢視包含從0到2047的所有數字,利用這個特性,可以把特定長度的字串轉化成關係格式,實現的**如下:

;with cte_numbers as

(

select

number

from

master.dbo.spt_values

where type='p

'and

number

>0)

select

cast(substring(@str, n.number, charindex(@separator ,@str

+@separator ,n.number )-n.number) as

nvarchar(4000)) as

item

--,n.number

from

cte_numbers n

where n.number

<=

len(@str)+

1and

charindex(@separator,@separator

+@str,n.number)=n.number

對於該方法,要體會其**的思路,通過資料序列,從數字1開始,逐個檢測分隔符,對字串進行分割操作,擷取子字串,從而把字串轉化成關係表;由於master.dbo.spt_values只有0到2047個順序數字,在必要時,可以替換該系統檢視,而使用自定義的資料序列表,以增加能夠拆分的字串長度。

在資料庫開發中,實現字串和關係格式的相互轉化,我傾向於使用面向集合的查詢,通過面向過程的程式設計思想來實現,思路直接,比較簡單,在此就不再贅述了。

why (and how) to split column using master..spt_values?

字串和關係格式的轉化

在資料庫開發過程中,字串和關係表的轉化是一項基本技能。當字串中存在分隔符時,有時將其轉換成關係表資料,和其他資料表進行join查詢,出現這種情況,是因為沒有遵守關聯式資料庫的設計正規化,沒有把字串拆分成原子項儲存,也有可能是資料傳引數 有時會遇到相反的情況,需要將關係表的相關資料拼接成乙個字串顯示,...

python 字串 時間格式的轉化

獲取現在時間 nowtime datetime.datetime.now strftime y m d 1 先將2019年3月8日轉換成字元型2019 3 8,再轉換成時間格式 方法1 import datetime time 2019年3月8日 datetime.datetime.strptime...

把某種格式的字串轉化為駝峰字串

import org.junit.test public class solution 將給定字串 border left color轉換成駝峰寫法為borderleftclor public string hump string str 把字串根據格式拆分出string陣列 string stra...