表中有某个字段来记录名字的拼音,现在显示时要按用户的要求显示格式如
Chun Xia Song           要显示成  Song C.X
LiXie                   要显示成  Xie L
Chen Xi Ou Yang        要显示成  Ou Yang  C.X      
要怎么转换?名字有四个字时比较特别

解决方案 »

  1.   

    declare @name varchar(50)
    declare @sql varchar(1000)
    declare @i int
    declare @a int
    declare @n1 int
    declare @n2 int
    declare @n3 int
    declare @n4 int
    set @a=0
    set @i=0
    declare c_cur cursor
    for select name from test
    open c_cur
    fetch next from c_cur into @namewhile @@fetch_status=0 
    begin
    set @a=0
    set @i=0
    set @n1=0
    set @n2=0
    set @n3=0
    set @n4=0
    while @i <= len(@name)
      begin
        if ascii(right(left(@name,@i),1))>=65 and ascii(right(left(@name,@i),1))<=90
           begin
             
             set @a=@a+1
             if @a=1 
                set @n1=@i
             if @a=2 
                set @n2=@i
             if @a=3 
                set @n3=@i
             if @a=4 
                set @n4=@i
           end
      set @i=@i+1 
      end
    if @a>2
    begin
       print right(@name,len(@name)+1-@n3)+' '+right(left(@name,@n1),1)+'.'+right(left(@name,@n2),1)
    end
    else
    begin
       print right(@name,len(@name)+1-@n2)+' '+right(left(@name,@n1),1)
    end
    fetch next from c_cur into @name
    end
    close c_cur
    deallocate c_cur
      

  2.   


    --写个函数试试
    GO
    IF OBJECT_ID('Fun_test')IS NOT NULL
    DROP FUNCTION Fun_test
    GO
    CREATE FUNCTION Fun_test(@name varchar(20))
    RETURNS VARCHAR(20)
    AS
    BEGIN
      --IF CHARINDEX(' ',@name)>0
        --begin
         declare @str varchar(20)
         set @str=''
         declare @firstname varchar(10)
         declare @midname varchar(10)
         declare @lastname varchar(10)
         select @firstname=(left(@name,charindex(' ',@name)-1))
         select @midname=(substring(@name,charindex(' ',@name)+1,charindex(' ',@name,charindex(' ',@name))))
         select @lastname=reverse(left(reverse(@name),len(@name)-3-charindex(' ',@name,charindex(' ',@name))))
         select @str=@lastname+' '+left(@firstname,1)+'.'+left(@midname,1)
         return @str
        --end
    END
    go
    GO
    CREATE TABLE #TEST(
    NAME VARCHAR(20)
    )
    INSERT #TEST
    SELECT 'Chen Xi Ou Yang' UNION ALL
    SELECT 'Chun Xia Song'
    SELECT dbo.Fun_test(NAME) AS NEMAE FROM #TEST
    /*
    NEMAE
    Ou Yang C.X
     Song C.X
    */