Solved

Get ExcelColumn-Char from Number

Posted on 2007-11-23
12
232 Views
Last Modified: 2010-05-18
I'm pretty new with SQL-Server and never created a custom function.
I have a table column (int) which represents an Excel ColumnID. Now I need to display the column header.

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

Can anybody help.
Chris
0
Comment
Question by:chriswies
  • 6
  • 3
  • 2
  • +1
12 Comments
 
LVL 6

Accepted Solution

by:
PaultheBroker earned 500 total points
ID: 20338451
I've done this as a function as requested, but could also just be included in the SQL
CREATE FUNCTION dbo.ColHeader_fn
	( @Int 	integer )
RETURNS varchar(2)
AS
BEGIN
	DECLARE @ColHeader varchar(2)
	if @int>26 set @ColHeader = char(64+@int/26) + char(64+@int-(26*(@int/26)))
	else set @ColHeader = char(64+@int)
RETURN @ColHeader
END
 
--USAGE
select dbo.ColHeader_fn(43)

Open in new window

0
 
LVL 18

Expert Comment

by:Yveau
ID: 20338457
Try this:

Hope this helps ...
declare @Y int
set     @Y = 55
 
select  @Y
,       case
            when @Y <= 26 then char(@Y+64)
            else char(((@Y-1)/26)+64) + char(((@Y-1)%26)+65)
        end

Open in new window

0
 
LVL 6

Expert Comment

by:PaultheBroker
ID: 20338467
Here is the SQL (assuming the table column with the Excel ColumnID is called [Integer]
[ColHeader] = 
case when [Integer] > 26 then char(64+[Integer]/26) + char(64+[Integer]-(26*([Integer]/26)))
	else char(64+@int) end

Open in new window

0
Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

 

Author Comment

by:chriswies
ID: 20338481
amazing, great
thank you Yveau
0
 
LVL 6

Expert Comment

by:PaultheBroker
ID: 20338516
hmmmph !
0
 

Author Comment

by:chriswies
ID: 20338547
hmmmmph!
understand, that was my fault.
Actually I want to go with the function. I hit accept on the 2nd last and that was not your solution. I didn't see your 2nd post at that time.
What is EE rule for that?
How can I go from here?
Chris
0
 
LVL 6

Expert Comment

by:PaultheBroker
ID: 20338616
Thanks for that....!!  I think you need to post a question in the Community Support, asking the Moderator to change the point allocation.  Include a link to your original question.
0
 
LVL 18

Expert Comment

by:Yveau
ID: 20338632
0
 
LVL 6

Expert Comment

by:PaultheBroker
ID: 20343449
From Yveau's solution I notice the use of the % operand - I was looking for hte MOD function - and now I've found it!!  For completeness, I've updated my solution to incorporate my new found knowledge !!!   It actually makes the equation nice and symmetrical :)  BTW: did you ever get anywhere on having the point allocation changed???
-----------------
CREATE FUNCTION dbo.ColHeader_fn
      ( @Int       integer )
RETURNS varchar(2)
AS
BEGIN
      DECLARE @ColHeader varchar(2)
      if @int>26 set @ColHeader = char(64+@int/26) + char(64+@int%26)
      else set @ColHeader = char(64+@int)
RETURN @ColHeader
END
0
 
LVL 1

Expert Comment

by:Vee_Mod
ID: 20345574
Re-opened at Asker request.


Vee_Mod
Experts Exchange Moderator
0
 
LVL 6

Expert Comment

by:PaultheBroker
ID: 20345656
Call me a perfectionist, but the IF..THEN... (or case ...when) statement has been bugging me as being somehow 'inelegant'.  So I've reworked it slightly so the whole operation is performed in a single operation.....enjoy!
ALTER FUNCTION dbo.ColHeader_fn
      ( @Int       integer )
RETURNS varchar(2)
AS
BEGIN
      DECLARE @ColHeader varchar(2)
	SET @ColHeader =REPLACE(char(64+@int/26) + char(64+@int%26),char(64),'')
RETURN @ColHeader
END

Open in new window

0
 

Author Comment

by:chriswies
ID: 20917885
Hi,
I received a but report from a user that had a column 52 which is AZ but the function deliviered B@.
So I reviewed the function and found that actually the logic of Yveau brings up the right col.
Thanks Yveau!!

That is how the function looks right now:
CREATE FUNCTION dbo.ColHeader_fn3
      ( @Int       integer )
RETURNS varchar(2)
AS
BEGIN
      DECLARE @ColHeader varchar(2)
      if @int>26 set @ColHeader = char(((@int-1)/26)+64) + char(((@int-1)%26)+65)
      else set @ColHeader = char(64+@int)
RETURN @ColHeader
END
0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

In this article I will describe the Backup & Restore method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question