我读取数据库表的某条记录的某个值VARCHAR(8000)
比如我得到了数据如下:
afdagag你好么adgagw我很开心sagffk;k我在杭州asdf
我要查询得到
英文字段1,中文字段2,英文字段3,中文字段4 等等(根据获得的结果增加字段。)对应的值分别是英文对英文,中文对中文

解决方案 »

  1.   

    --1)查询DECLARE @str nvarchar(MAX)
    DECLARE @i int
    DECLARE @cut int
    DECLARE @s nvarchar(300)
    DECLARE @tbl TABLE
    (id int ,
    pos varchar(32))
    DECLARE @tbl_2 TABLE
    (id int ,
    pos varchar(32))
    SET @str = 'xyz沈亮r上海r中国城市sed魔兽争霸hi努力奋斗awk中国历史shenl'
    SET @i = 1 
    SELECT @cut = LEN(@str)
    WHILE @i <= @cut
    BEGIN
    SELECT @s = SUBSTRING(@str,@i,1)
    IF ASCII(@s) <= 122 
    BEGIN
    INSERT INTO @tbl VALUES(@i,@s)
    END
    IF ASCII(@s) > 122
    BEGIN
    INSERT INTO @tbl_2 VALUES(@i,@s)
    END SET @i = @i + 1END
    --SELECT * INTO #Ch FROM @tblSELECT *
    INTO #Shenl FROM (
    SELECT id,pos, Range = id - Num 
    FROM(
    SELECT id,pos,Num = ROW_NUMBER()OVER(ORDER BY id) FROM @tbl a)B )CSELECT *
    INTO #Liang FROM (
    SELECT id,pos, Range = id - Num 
    FROM(
    SELECT id,pos,Num = ROW_NUMBER()OVER(ORDER BY id) FROM @tbl_2 a)B )C
    SELECT *,New_Word = REPLACE(pos,'||',''),Type = 'EngLish'
     FROM 
    (SELECT DISTINCT Range
     FROM #Shenl )A
    OUTER APPLY 
    (
    SELECT pos = STUFF(REPLACE(REPLACE(REPLACE(REPLACE(
    (SELECT pos 
    FROM #Shenl N
    WHERE A.Range = N.Range
    AND pos IS NOT NULL
    FOR XML AUTO),'<N pos="','||'),'"/>',''),'&lt;',''),'&gt;',''),1,2,''))NUNION ALLSELECT *,New_Word = REPLACE(pos,'||',''),Type = 'Chinese'
     FROM 
    (SELECT DISTINCT Range
     FROM #Liang )A
    OUTER APPLY 
    (
    SELECT pos = STUFF(REPLACE(REPLACE(REPLACE(REPLACE(
    (SELECT pos 
    FROM #Liang N
    WHERE A.Range = N.Range
    AND pos IS NOT NULL
    FOR XML AUTO),'<N pos="','||'),'"/>',''),'&lt;',''),'&gt;',''),1,2,''))NDROP TABLE #Shenl
    DROP TABLE #Liang--2)结果New_Word Typexyz EngLish
    r EngLish
    r EngLish
    sed EngLish
    hi EngLish
    awk EngLish
    shenl EngLish
    沈亮 Chinese
    上海 Chinese
    中国城市 Chinese
    魔兽争霸 Chinese
    努力奋斗 Chinese
    中国历史 Chinese
      

  2.   

    做成字段很麻烦,做成记录比较方便,参考如下的函数./*
    功能:实现split功能的函数
    */create function dbo.fn_split 
    (
    @inputstr varchar(8000), 
    @seprator varchar(10)
    )
    returns @temp table (a varchar(200))
    as begin
    declare @i intset @inputstr = rtrim(ltrim(@inputstr))
    set @i = charindex(@seprator, @inputstr)while @i >= 1
    begin
    insert @temp values(left(@inputstr, @i - 1))set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
    set @i = charindex(@seprator, @inputstr)
    endif @inputstr <> '\'
    insert @temp values(@inputstr)return 
    end
    go--调用declare @s varchar(1000)set @s='1,2,3,4,5,6,7,8,55'select * from dbo.fn_split(@s,',')drop function dbo.fn_split