zoukankan      html  css  js  c++  java
  • sql server 中英混合排序

    首先 把中文首字母转成英文 然后 在通过 order by  排序就可以,处理排序英文在前的问题

    select dbo.fnpbGetPYFirstLetter(FName) as chinaname,FName from t_Organization

    执行存储过程

    --全部扔进去执行,不用修改
    Create FUNCTION dbo.fnpbGetPYFirstLetter
    (
    @str NVARCHAR(4000)
    )
    /*
    select dbo. fnpbGetPYFirstLetter ('中國香港')
    */
    RETURNS NVARCHAR(4000)
    --WITH ENCRYPTION
    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 @PY
    
    END
    
    Go

    原文:https://www.cnblogs.com/erph/p/6909474.html

  • 相关阅读:
    mysql索引
    mysql视图
    pymysql
    web前端基础
    【BZOJ2002】[HNOI2010] 弹飞绵羊(大力分块)
    【BZOJ2730】[HNOI2012] 矿场搭建(找割点)
    网络流(一)——最大流
    欧拉路与欧拉回路
    扫描线(一)——求矩形面积并
    【洛谷3396】哈希冲突(大力分块)
  • 原文地址:https://www.cnblogs.com/hkzw/p/14467762.html
Copyright © 2011-2022 走看看