sql - 如何在 SQL Server 中创建序数(即 "1st" "2nd"等)

标签 sql sql-server tsql

我最近回复了to this question在 SSRS-2008 标签中,需要将日期中的天数更改为序数(即“1st”、“2nd”而不是“1”、“2”)。该解决方案涉及 VB.Net 函数。我很好奇如何在 SQL(特别是 t-sql 和 SQL Server)中执行此任务,或者是否有一些内置支持。

这里有一个场景:假设您为 1000 名运行者组织了一场赛跑,并将结果放在包含“名称”和“地点”列(以正常数字表示)的表中。您想要创建一个查询来显示用户的姓名及其在序数中的位置。

最佳答案

这是一个适用于任何数量的可扩展解决方案。我以为其他人用 % 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)

关于sql - 如何在 SQL Server 中创建序数(即 "1st" "2nd"等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172995/

相关文章:

sql - 将具有更新触发器的 "DateModified"列添加到包含 "DateCreated"列的所有表

sql - Postgres 中的多表 count()

asp.net - Azure 云服务与现有 Asp.Net 网站的 VM

如果插入失败,SQL Server 存储过程会恢复我的记录

sql - TSQL:选择插入中的if语句

python - 检查服务器是否有一个带有表的数据库,其中包含我在 win 7 上的 SQL Server 2008 上需要的信息

sql - 通过命令从 Oracle SQL 导出到 CSV

.net - 使用 Linq-2-Sql 时的 System.Transactions 源警告

sql-server - SQL查询的执行顺序

sql-server - 嵌套的插入exec解决