我将名为“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
请帮助我获取特殊字符以排在第一行。
答案 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是最低值, 然后特殊字符, 那么数字, 然后是信件。