我最近回复了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/