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

时间:2016-09-29 01:04:22

标签: excel tsql

使用T-SQL如何将序号列位置编号转换为Excel A1表示法列引用?

例如:

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

等等。

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

1 个答案:

答案 0 :(得分:1)

我原来的答案是错误的。更新了charles-bretana的答案的功能化版本,该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

以下是要测试的代码

;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'