当记录集中有特殊字符时,Order By Clause返回错误的顺序

时间:2016-08-11 07:22:03

标签: sql sql-server database

我正在使用SQL服务器。我从数据库中获取学生信息。我按照姓氏排序,然后按名称ORDER BY lastname, firstname命名,直到我有简单的数据。当名称中出现“〜”或任何其他字符时,会出现问题。它扰乱了秩序。

更新 这是我目前所得到的

Currently

在前端我有这个

Front End

期望是2和3应该在4和5之后,因为k是第一顺序然后ñ

2 个答案:

答案 0 :(得分:1)

在查询中使用Collate。希望能有所帮助!像:

SELECT FIRSTNAME, LASTNAME
FROM TABLE
ORDER BY FIRSTNAME Collate SQL_Latin1_General_CP1253_CI_AI

答案 1 :(得分:0)

在sql server -----

中创建此功能
    CREATE FUNCTION dbo.RemoveSpecialChars (@s VARCHAR(256))
RETURNS VARCHAR(256)
    WITH schemabinding

BEGIN
    IF @s IS NULL
        RETURN NULL

    DECLARE @s2 VARCHAR(256)

    SET @s2 = ''

    DECLARE @l INT

    SET @l = len(@s)

    DECLARE @p INT

    SET @p = 1

    WHILE @p <= @l
    BEGIN
        DECLARE @c INT

        SET @c = ascii(substring(@s, @p, 1))

        IF @c BETWEEN 48
                AND 57
            OR @c BETWEEN 65
                AND 90
            OR @c BETWEEN 97
                AND 122
            SET @s2 = @s2 + CHAR(@c)
        SET @p = @p + 1
    END

    IF len(@s2) = 0
        RETURN NULL

    RETURN @s2
END

现在您可以按照---

订购
SELECT *
FROM yourtablename
ORDER BY dbo.RemoveSpecialChars(yourcolumnname)