特殊字符在sql中排序

时间:2017-05-05 09:47:54

标签: mysql sql-server db2

我将名为“Contacts”的表格命名为id和name。各列值如下所示。

ID    |   Name
1     |   ABC
3     |   DEF
2     |   GHI
~!    |   JKL
null  |   MNO
null  |   PQR

我需要查询要在顶行列出的特殊字符,如下所示。

ID    |   Name
~!    |   JKL
1     |   ABC
2     |   GHI
3     |   DEF
null  |   MNO
null  |   PQR

我有查询使下面列出的空值

select ID, Name 
from Contacts 
order by ID NULLS LAST

请帮助我获取特殊字符以排在第一行。

3 个答案:

答案 0 :(得分:1)

SELECT * FROM
TABLE
ORDER BY 
   CASE WHEN id NOT LIKE '%[^a-zA-Z0-9]%' THEN 1
   WHEN id IS NULL THEN 3
   ELSE 2 END, id

使用正则表达式

答案 1 :(得分:1)

Declare @tab table(ID Varchar(10) , Name varchar(50))
INSERT INTO @tab
SELECT '1'  ,'ABC' Union ALL
SELECT '3'  ,'DEF' Union all
SELECT '2'  ,'GHI' Union all
SELECT '~!'  ,'JKL' Union all
SELECT null,'MNO' Union all
SELECT null,'PQR'
;WITH cte
AS
(
    SELECT ID , Name,ROW_NUMBER()Over(Order by Id)Seq FROM
    (
        SELECT * FROM
        (
                SELECT *, CASE WHEN CHARINDEX('^~![a-z]',Id) >0 Then 0  
                   WHEN  ISNULL(ID,0) =0 THEN 1
                     ELSE Id END Seq  FROM @tab
        )Dt
    WHERE Dt.ID IS NOT NULL 
)Final

UNION ALL 

    SELECT ID,Name,ROW_NUMBER()Over(Order by Id)Seq1 FROM
    (
        SELECT * FROM   
        (
            SELECT *, CASE WHEN CHARINDEX('^~![a-z]',Id) >0 Then 0  
                         WHEN  ISNULL(ID,0) =0 THEN 1
                         ELSE Id END Seq  FROM @tab
        )Dt
        WHERE Dt.ID IS  NULL
)Final
)
SELECT * FROM CTE

输出

ID      Name    Seq
-------------------
~!       JKL     1
1       ABC     2
2       GHI     3
3       DEF     4
NULL    MNO     1
NULL    PQR     2

答案 2 :(得分:1)

您可以使用以下查询根据您的要求对ID进行排序,其中Select ID, Name from contact order by case when ID IS NULL then 1 else 0 end,ID 行将在最后排序。

<div class="progressContainer">
    <div id="progress" class="progress"></div>
</div>

对于字符串列的排序:SQL使用字母顺序。

NULL是最低值, 然后特殊字符, 那么数字, 然后是信件。