一尘不染

如何在SQL中创建序数(即“第一”,“第二”等)

sql

我最近在SSRS-2008标记中回答了这个问题,要求将日期中的天数更改为序数(即“ 1st”,“ 2nd”而不是“ 1”,“2”)。该解决方案涉及VB.Net功能。我很好奇如何在SQL中执行此任务(特别是t-sql和SQL Server),或者是否有内置的支持。

因此,这是一个场景:假设您为1000个跑步者组织了一场比赛,并将结果存储在带有“名称”和“位置”(以正常数字表示)列的表格中。您想要创建一个查询,该查询将显示用户名及其在序号中的位置。


阅读 156

收藏
2021-03-10

共1个答案

一尘不染

这是一个可扩展的解决方案,适用于任何数量。我以为别人用了%100来表示11,12,13,但我弄错了。

WITH CTE_Numbers
AS
(
    SELECT 1 num
    UNION ALL
    SELECT num + 1
    FROM CTE_Numbers
    WHERE num < 1000
)

SELECT  CAST(num AS VARCHAR(10))
        +
        CASE
            WHEN num % 100 IN (11,12,13) THEN 'th' --first checks for exception
            WHEN num % 10 = 1 THEN 'st'
            WHEN num % 10 = 2 THEN 'nd'
            WHEN num % 10 = 3 THEN 'rd'
            ELSE 'th' --works for num % 10 IN (4,5,6,7,8,9,0)
        END
FROM CTE_Numbers
OPTION (MAXRECURSION 0)
2021-03-10