隨筆-199  評論-203  文章-11  trackbacks-0
          分拆列值

          原著:鄒建
          改編:愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開) 
          2007-12-16  廣東深圳

          有表tb, 如下:
          id          value
          ----------- -----------
          1          aa,bb
          2          aaa,bbb,ccc
          欲按id,分拆value列, 分拆后結果如下:
          id          value
          ----------- --------
          1          aa
          1          bb
          2          aaa
          2          bbb
          2          ccc

          1. 舊的解決方法(sql server 2000)
          SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b

          SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)
          FROM tb A, # B
          WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','

          DROP TABLE #

          2. 新的解決方法(sql server 2005)

          create table tb(id int,value varchar(30))
          insert into tb values(1,'aa,bb')
          insert into tb values(2,'aaa,bbb,ccc')
          go
          SELECT A.id, B.value
          FROM(
             
          SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', ' </v> <v>') + ' </v> </root>') FROM tb
          )A
          OUTER APPLY(
             
          SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
          )B

          DROP TABLE tb

          /*
          id          value
          ----------- ------------------------------
          1          aa
          1          bb
          2          aaa
          2          bbb
          2          ccc

          (5 行受影響)
          */
          posted on 2009-03-11 08:44 Werther 閱讀(1044) 評論(0)  編輯  收藏 所屬分類: 15.SQL Server
          主站蜘蛛池模板: 华坪县| 芦溪县| 安达市| 永靖县| 西丰县| 鹰潭市| 廊坊市| 深州市| 高州市| 丹棱县| 康定县| 县级市| 桐梓县| 井冈山市| 如东县| 鄯善县| 梧州市| 专栏| 宁远县| 黄大仙区| 梁河县| 镶黄旗| 伽师县| 含山县| 湟源县| 宝坻区| 富川| 界首市| 肥东县| 文登市| 保靖县| 合江县| 沐川县| 渝中区| 大方县| 汉寿县| 安陆市| 广饶县| 高淳县| 金湖县| 特克斯县|