---恢復內容開始---
本文轉由於業務需求,我們可能會把一串以分割符字串資料放到乙個字段,如我們在客戶端處理拆分是很簡單的,不過這樣做效果不太好,怎麼用sql server 2008 來解決這件事件哪?
--參考
拆分表:
--> --> (roy)生成測試資料
if not object_id(
'tab')
isnull
drop table tab
go create table tab([col1]
int,[col2] nvarchar(
5))
insert tab
select
1,n '
a,b,c
' union all
select
2,n '
d,e' union all
select
3,n 'f'
go
sql2000用輔助表:
if object_id(
'tempdb..#num
') is not
null
drop table #num
go select top
100 id=identity(
int,
1,1) into #num
from syscolumns a,syscolumns b
select
a.col1,col2=substring(a.col2,b.id,charindex(
',',a.col2+
',',b.id)-b.id)
from
tab a,#num b
where
charindex(
',',
','+a.col2,b.id)=b.id --也可用 substring(
','+a.col2,b.id,
1)=','
sql2005用xml:
select
a.col1,b.col2
from
( select col1,col2=convert(xml,
''+replace(col2,
',',
'')+ '
') from tab)a
(select col2=c.v.value(
'.',
'nvarchar(100)
') from a.col2.nodes(
'/root/v
')c(v))b
sql05用cte:
;with roy
as( select col1,col2=cast(left(col2,charindex(
',',col2+
',')-
1) as nvarchar(
100)),split=cast(stuff(col2+
',',
1,charindex(
',',col2+
','),
'')
as nvarchar(
100))
from tab
union all
select col1,col2=cast(left(split,charindex(
',',split)-
1) as nvarchar(
100)),split= cast(stuff(split,
1,charindex(
',',split),
'')
as nvarchar(
100))
from roy
where split>
'')
select col1,col2
from roy order by col1 option (maxrecursion
0) 生成結果:
/*col1 col2
----------- -----
1 a
1 b
1 c
2 d
2 e
3 f
*/
乙個字段匹配的sql語句書寫
新的一年開始了,首先向大家拜個年,祝大家過年好!這幾天負責乙個家教門戶 的開發,基於cakephp框架。在培訓機構表 schools 中存在乙個欄位subject用來儲存另乙個資料表 subjects 中記錄的id值,且儲存形式為 1,2,3,4,5 但是在應用高階搜尋過濾時頁面select選項op...
mysql多表乙個字段
先執行這三個 show variables like group concat max len 查詢大小 set global group concat max len 10240000 設定大小滿足執行後能夠存放所有的插入語句 set session group concat max len 10...
mysql乙個欄位為空時使用另乙個字段排序
表中有兩個日期欄位createdate,updatedate。其中updatedate可以為空,要求使用updatedate排序,如果updatedate為空則使用createdate排序,結果要順序排下來。按照常規方法 這樣的結果是為空的資料排在了最下面,不符合要求。這樣試試 這樣排的結果是先按u...