資料庫難題對話

2021-05-01 02:45:30 字數 3654 閱讀 3548

交談中請勿輕信匯款、中獎資訊,勿輕易撥打陌生**。

河北*無憂(917601252)  11:42:42

請教在sql 2000中實現

有表tb, 如下:

id          values

----------- -----------

1           aa,bb

2           aaa,bbb,ccc

3        ddab,abc,a

4           a

欲按,分拆values列, 分拆後結果如下:

id          value

----------- --------

1           aa

1           bb

2           aaa

2           bbb

2           ccc

3       ddab

3       abc

3       a

4          a

哪位高手幫幫忙啊

長春銀狐(隱身)(4775457)  11:44:14

那天不是解決了嗎。 

上海-飛飛(329753774)  11:44:33

銀狐好強的 

長春銀狐(隱身)(4775457)  11:44:59

select b.id,name=substring(b.[name], a.number, charindex(',', b.[name] + ',', a.number) - a.number)  

from master..spt_values a,tb b 

where type='p' 

and substring(',' + b.[name], a.number,1) = ',' 

長春銀狐(隱身)(4775457)  11:45:30

呵呵,我也是菜鳥。。。 

上海-飛飛(329753774)  11:45:39

比我強 

河北*無憂(917601252)  11:46:06

真是謝謝。

好我試試。

長春銀狐(隱身)(4775457)  11:46:16

河北*無憂

把我給你的語句改一下。就可以了。 

河北*無憂(917601252)  11:46:51

能解釋下嗎?我不太明白。

長春銀狐(隱身)(4775457)  11:47:29

就是用substring來按逗號分隔來取相應的字串。 

長春銀狐(隱身)(4775457)  11:48:07

內聯的那個儲存過程是用來按段來算的。 

長春銀狐(隱身)(4775457)  11:48:13

我說的有點亂。。 

河北*無憂(917601252)  11:48:29

charindex(',', b.[name] + ',', a.number) - a.number)  

為什麼要減a.number

河北*無憂(917601252)  11:49:20

沒事,給我說就好了,我真的不明白。

長春銀狐(隱身)(4775457)  11:49:31

charindex(',','aaa,bbb,ccc,',a.number) 

長春銀狐(隱身)(4775457)  11:49:39

拿這句做例子。 

河北*無憂(917601252)  11:49:57

還有where 後面的句子,就更是不懂了。

河北*無憂(917601252)  11:50:13

好的。您說。

北京-望月神(64701333)  11:50:30

你搞懂幾個函式就行了

北京-望月神(64701333)  11:50:45

乙個是charindex,乙個是substring

河北*無憂(917601252)  11:51:07

我明白 ,但是組在一起我就不明白了。

長春銀狐(隱身)(4775457)  11:52:02

從a.number的位置查詢逗號,然後用substring來取值。 

長春銀狐(隱身)(4775457)  11:52:40

where條件就是看串裡是否還有逗號 

北京-望月神(64701333)  11:52:59

substring(b.[name], a.number, charindex(',', b.[name] + ',', a.number) - a.number)  

這句就是用charindex取長度,然後根據這個長度擷取字串作為name的值

長春銀狐(隱身)(4775457)  11:53:20

嗯。解釋的很清楚。比我說的明白。。 

長春銀狐(隱身)(4775457)  11:55:32

declare @str as varchar(30),@n as int

set @str='aaa,b,ccc,dd'

set @n=1

while(@n<20)

begin

print substring(@str,@n,charindex(',',@str+',',@n)-@n

end 

長春銀狐(隱身)(4775457)  11:55:51

用段執行一下就看出效果了。 

長春銀狐(隱身)(4775457)  11:56:39

剛才有問題。用這句:

declare @str as varchar(30),@n as int

set @str='aaa,b,ccc,dd'

set @n=1

while(@n<20)

begin

print substring(@str,@n,charindex(',',@str+',',@n)-@n)

set @n=@n+1

end 

長春銀狐(隱身)(4775457)  11:57:46

declare @str as varchar(30),@n as int

set @str='aaa,b,ccc,dd'

set @n=1

while(@n<20)

begin

print substring(@str,@n,charindex(',',@str+',',@n)-@n+1)

set @n=@n+1

end這句更明確一些。 

長春銀狐(隱身)(4775457)  11:57:57

aaa,

aa,a,,b,

,ccc,

cc,c,,dd

d這個是結果。 

長春銀狐(隱身)(4775457)  11:58:11

還有人在聽嗎?沒人就不說了。。。 

河北*無憂(917601252)  11:58:18

在。河北*無憂(917601252)  11:58:34

我都跟不上你們的速度。

長春銀狐(隱身)(4775457)  11:58:49

哦?說快了? 

河北*無憂(917601252)  11:58:52

太厲害了。

長春銀狐(隱身)(4775457)  11:59:10

望月神厲害。。。 

河北*無憂(917601252)  11:59:33

我還沒消化呢。再想想。

資料庫 難題集

系統斷電屬於系統故障 1 分 系統重新啟動後的恢復步驟是 1 正向掃瞄日誌檔案,找出在故障發生前已經提交的事務佇列 redo 佇列 和未完成的事務佇列 undo佇列 2 對撤銷佇列中的各個事務進行 undo 處理。進行 undo 處理的方法是,反向 掃瞄日誌檔案,對每個 undo 事務的更新操作執行...

共迎海量資料庫管理挑戰 中韓資料庫專家對話北京

2011年3月26日,海量資料庫管理 企業面臨的挑戰暨中韓資料庫技術交流會 在中國人民大學舉行。本次會議由中國人民大學資訊學院主辦 北京人大金倉資訊科技股份 簡稱人大金倉 承辦。中國資料庫著名專家 中國人民大學資訊學院教授王珊,南韓著名資料庫專家李華植先生,中國人民大學資訊學院院長 中國人民大學資訊...

共迎海量資料庫管理挑戰 中韓資料庫專家對話北京

2011 年3月26日,海量資料庫管理 企業面臨的挑戰暨中韓資料庫技術交流會 在中國人民大學舉行。本次會議由中國人民大學資訊學院主辦 北京人大金倉資訊科技股份 簡稱人大金倉 承辦。中國資料庫著名專家 中國人民大學資訊學院 教授王珊,南韓著名資料庫專家李華植先生,中國人民大學資訊學院院長 中國人民大學...