/*
功能:根据返回所有汉字的首字母
调用:select [dbo].[fun_getPY]('真的好想你')
*/
Create FUNCTION [dbo].[fun_getPY](@str NVARCHAR(4000))
    RETURNS NVARCHAR(4000)
AS
BEGIN
    DECLARE @word NCHAR(1),@PY NVARCHAR(4000)
    SET   @PY=''
    WHILE len(@str)>0
    BEGIN
        SET @word=left(@str,1)
        --如果非汉字字符,返回原字符
        SET @PY=@PY+(CASE WHEN UNICODE(@word)BETWEEN 19968 AND 19968+20901
        THEN  (SELECT TOP 1 PY FROM(
        SELECT 'A' as PY,N'驁' as word
        UNION ALL SELECT 'B',N'簿'
        UNION ALL SELECT 'C',N'錯'
        UNION ALL SELECT 'D',N'鵽'
        UNION ALL SELECT 'E',N'樲'
        UNION ALL SELECT 'F',N'鰒'
        UNION ALL SELECT 'G',N'腂'
        UNION ALL SELECT 'H',N'夻'
        UNION ALL SELECT 'J',N'攈'
        UNION ALL SELECT 'K',N'穒'
        UNION ALL SELECT 'L',N'鱳'
        UNION ALL SELECT 'M',N'旀'
        UNION ALL SELECT 'N',N'桛'
        UNION ALL SELECT 'O',N'漚'
        UNION ALL SELECT 'P',N'曝'
        UNION ALL SELECT 'Q',N'囕'
        UNION ALL SELECT 'R',N'鶸'
        UNION ALL SELECT 'S',N'蜶'
        UNION ALL SELECT 'T',N'籜'
        UNION ALL SELECT 'W',N'鶩'
        UNION ALL SELECT 'X',N'鑂'
        UNION ALL SELECT 'Y',N'韻'
        UNION ALL SELECT 'Z',N'咗'
        )T
        WHERE word>=@word COLLATE Chinese_PRC_CS_AS_KS_WS
        ORDER BY PY ASC)ELSE  @word END)
        SET @str=RIGHT(@str,LEN(@str)-1)
    END
    RETURN UPPER(@PY)
END

解决方案 »

  1.   

    'FUNCTION' 附近有语法错误。
    它提示我这行有语法错误,这个还能怎么试啊,不知道了,感觉sql 是不是也发神经了,为什么就这个数据库不行,别的数据库全部都是可以用的
      

  2.   

    我现在其实想问的不是代码错在哪里,而是为什么会有一个数据库中不能用这个代码,而提示错误,如果说function附近语法错误了,那感觉也不大可能吧,难道创建函数,不是这样的写法吗?
      

  3.   

    有人知道,sql6.5,,sql7.0的函数是怎么写的吗
      

  4.   

    因为我这个是从sql6.5升级到sql7.0再升级到sql2000的,我怀疑这个函数不能用,估计是要用以前的函数规范来写吧
      

  5.   

    求教知道的,请给我发邮件也可以:[email protected]