使用T-SQL如何将序号列位置编号转换为Excel A1表示法列引用?
例如:
1 => A
2 => B
...
26 => Z
27 => AA
28 => AB
...
52 => AZ
等等。
背景是我们有一个从MS-SQL视图生成的复杂CSV文件。生成的CSV没有标题。我想为支持用户生成一些文档,这些文档将列位置映射到列名,因为它将导入到Excel中。
答案 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'