如何在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'