2016-09-29 4 views
0

Использование T-SQL, как преобразовать порядковый номер порядкового столбца в ссылку столбца с номером Excel A1?Как преобразовать порядковый номер в примечание Excel A1 в TSQL

например:

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

и так далее.

На заднем плане находится сложный CSV-файл, сгенерированный из представления MS-SQL. CSV генерируется без заголовков. Я хочу создать некоторую документацию для пользователя поддержки, который сопоставляет позицию столбца с именем столбца, поскольку он будет импортировать в Excel.

+0

Doh. должен был искать труднее в первый раз - спасибо @HABO – fiat

ответ

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' 
+0

Работает как очарование! Спасибо. – ZooZ