Solved

Get ExcelColumn-Char from Number

Posted on 2007-11-23
12
202 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
 

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
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 
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

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Let's review the features of new SQL Server 2012 (Denali CTP3). It listed as below: PERCENT_RANK(): PERCENT_RANK() function will returns the percentage value of rank of the values among its group. PERCENT_RANK() function value always in be…
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.
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.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed

746 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now