如何在TSQL中将序号转换为Excel A1表示法

如何使用T-SQL将序号列位置编号转换为Excel A1符号列参考?

例如:

1 => A 2 => B ... 26 => Z 27 => AA 28 => AB ... 52 => AZ 

等等。

背景是我们有一个复杂的CSV文件从MS-SQL视图生成。 CSV生成不带标题。 我想为支持用户生成一些文档,将列位置映射到列名,因为它将导入到Excel中。

我原来的答案是越野车。 更新了一个来自charles-bretana的function化版本,这个Q / A结果是一个重复的。

 -- Based off http://stackoverflow.com/a/16995299/1141876 CREATE FUNCTION dbo.OrdinalToExcelA1 ( @value INT ) RETURNS VARCHAR(10) AS BEGIN DECLARE @Output VARCHAR(10) select @Output = CASE WHEN @value < 703 THEN '' ELSE CHAR(64 + ((@value-26) / 26 / 26)) END + CASE WHEN @value < 27 THEN '' WHEN @value < 703 Then Char(64 + ((@value-1)/ 26)) ELSE CHAR(65 + ((@value-1)% 702 / 26)) END + CHAR(65 + ((@value - 1) % 26)) RETURN @Output END GO 

这是要testing的代码

 ;WITH Nums AS ( SELECT n = ROW_NUMBER() OVER (ORDER BY [object_id]) FROM sys.all_objects ) select n AS ColumnOrdinal, dbo.OrdinalToExcelA1(n) as ExcelA1Format FROM Nums WHERE n BETWEEN 1 AND 100 ORDER BY n; 

这里是如何使用它

 SELECT dbo.OrdinalToExcelA1(ORDINAL_POSITION) AS ExcelColumn ,Column_Name AS Name FROM information_schema.columns WHERE table_name = 'MY-VIEW-NAME'