我最近在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)