我数据库里有个字段,它存的数据是以,隔开的
我现在想将,隔开的数据依次取出来,并以其他的名称命名
请问这样 的有语句能够实现吗?
在线期待。

解决方案 »

  1.   

    CREATE TABLE A(id INT,country VARCHAR(100))
    INSERT A
    SELECT 1,'中国;日本;韩国' UNION ALL
    SELECT 2,'美国;意大利;法国' UNION ALL
    SELECT 3,'德国'
    SELECT * FROM A-- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b    
    SELECT 
        A.ID, 
        COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY + ';', B.ID) - B.ID) 
    FROM A, # B
    WHERE SUBSTRING(';' + a.COUNTRY, B.id, 1) = ';'   
    ORDER BY 1,2
    GODROP TABLE A,#id          country         
    ----------- ----------------
    1           中国;日本;韩国
    2           美国;意大利;法国
    3           德国(所影响的行数为 3 行)ID          COUNTRY  
    ----------- ---------
    1           韩国
    1           日本
    1           中国
    2           法国
    2           美国
    2           意大利
    3           德国(所影响的行数为 7 行)
      

  2.   

    如何将'2006-01-12|2006-02-13|2006-03-15|2006-11-11|2003-1-1'按'|'分割成
    2006-01-12
    2006-02-13
    2006-03-15
    2006-11-11
    2003-1-1
    declare @Days varchar(4000)
    declare @tmpDay varchar(10)
    set @Days='2006-01-12|2006-02-13|2006-03-15|2006-11-11|2003-1-1'
    set @tmpDay=''
    declare @i int
    set @i=0
    while @i<len(@Days)
    begin 
      set @i=@i+1
      if SUBSTRING(@Days,@i,1)='|'
         begin
           print left(@Days,@i-1)
           set @Days=SUBSTRING(@Days,@i+1,len(@Days))
           set @i=0
         end  
    end
    print @Days
    输出结果:
    2006-01-12
    2006-02-13
    2006-03-15
    2006-11-11
    2003-1-1一字段信息包括如下:李三|李三@d.com|公司|单位地址|  
    我将查询用(Select)只列出李三及单位地址的方法?create table #t(c1 varchar(100))
    insert into #t select 'li4|33@com|mircrosoft|china|'
    insert into #t select 'zhang3|[email protected]|IBM|USA|'
    insert into #t select '李三|李三@d.com|公司|单位地址|'
    select substring(c1,1,charindex('|',c1)-1) as name, 
    reverse(substring(reverse(c1) , 2 , charindex('|' , reverse(c1) , 2) - 2)) as address  from #tdrop table #tname    address   
    -----   -------
    li4     china
    zhang3  USA
    李三    单位地址(所影响的行数为 3 行)
      

  3.   

    CREATE FUNCTION f_splitSTR(
    @s   varchar(8000),    --待分拆的字符串
    @split varchar(10)     --数据分隔符
    )RETURNS @re TABLE(No varchar(100),Value varchar(20))
    AS
    BEGIN
    --创建分拆处理的辅助表(用户定义函数中只能操作表变量)
    DECLARE @t TABLE(ID int IDENTITY,b bit)
    INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re 
    SELECT No=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
    Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
    FROM(
    SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
    FROM @t
    WHERE ID<=LEN(@s+'a') 
    AND CHARINDEX(@split,@split+@s,ID)=ID)a
    RETURN
    END
    GO
      

  4.   

    复制一下邹老大的列子
    --字符串分拆辅助表
    SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
    FROM syscolumns a,syscolumns b
    GO--字符串分拆处理函数
    CREATE FUNCTION f_splitSTR(
    @s     varchar(8000),  --待分拆的字符串
    @split  varchar(10)     --数据分隔符
    )RETURNS TABLE
    AS
    RETURN(
    SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
    FROM tb_splitSTR
    WHERE ID<=LEN(@s+'a') 
    AND CHARINDEX(@split,@split+@s,ID)=ID)
      

  5.   

    只有感谢大家的热心与帮助,能够告诉一些关于SQL函数的书籍或网站么?我想好好学学。