August 21, 2008 at 2:39 pm
Currently I am using the following to take an integer and create a 6 character number with leading 0's but really need a shorter method/function.
REPLICATE(0, 6-len(CONVERT(varchar(6), integerfield1))) + CONVERT(Varchar(6), integerfield1)
to create a character field of
000001 for the value of 1 and
000010 for the value of 10 and so on...
Is there a shorter method/function for creating these results.
I absolutely need it to be a left justified number with leading zeroes because i and concatenating a string, number, sting and comparing it to a given string.
August 21, 2008 at 3:39 pm
How about this, not sure how short you want it
DECLARE @Int AS INT
SET @Int = 1
SELECT RIGHT(REPLICATE('0', 6) + CAST(@Int AS VARCHAR(6)), 6)
August 21, 2008 at 3:55 pm
Even shorter:
DECLARE @Int AS INT
SET @Int = 1
SELECT RIGHT('00000' + CAST(@Int AS VARCHAR(6)), 6)
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]
August 21, 2008 at 4:00 pm
Nice.. I almost did it without the REPLICATE() function. Always felt it was more typing than needed.
August 21, 2008 at 6:26 pm
dmc (8/21/2008)
Nice.. I almost did it without the REPLICATE() function. Always felt it was more typing than needed.
There is something wrong with a convenience function to make duplicates of a sinlge character that takes 12 extra characters to do it. For anything less than 13 copies of a character, you might as well just type it in as a literal.
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]
August 21, 2008 at 7:16 pm
Short? You guys need to try harder. :satisfied:
select
NewNum = right(1000000+MyNum,6)
from
( --Test Data
select MyNum=1union all
select 10union all
select 100union all
select 1000union all
select 10000union all
select 100000union all
select 999999 ) a
Results:
NewNum
------
000001
000010
000100
001000
010000
100000
999999
August 22, 2008 at 9:35 am
HA! Short indeed.. but the post asked for a character based result. But koodos if the string data type is not really needed.
August 22, 2008 at 9:52 am
Thank you for that. I am using a 4GL language and they only allow me 300 characters for my part of the query. So when i have 3-5 selection criterias i usually have to decide which ones to leave out. This will help tremendously....
August 22, 2008 at 10:01 am
Can you write stored procedures and/or functions on the database?
[font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
Proactive Performance Solutions, Inc. [/font][font="Verdana"] "Performance is our middle name."[/font]
August 22, 2008 at 10:38 am
We can write functions/stored procedures but the problem comes from the 4GL Language.
THEY issue a query command (SELECT ..... WHERE... ) and we are only allowed to add to the where clause. Plus I am limited to just 300 characters. Most of my selection criteria is for ranges of values. strings, dates, integers. But on some of the selection routines it involves 3 fields in multiple tables
F1 Char(4), F2 Integer, F3 Integer. through our programs we limit F2 to max size of 6 digits (999999) and F3 to 2 digits (99). So wen i put those into my where clause with the big replicate command i pretty much ate up the 300 characters.
F1+F2(6)+F3(2) in (select F1+F2(6)+F3(2) from Table2 where F4 = ...) or
F1+F2(6)+F3(2) >= '{programed start value (string)}' and F1+F2(6)+F3(2) <= '{programmed end value (string)}'
So any thing i could do to shorten it helps.
August 22, 2008 at 6:26 pm
dmc (8/22/2008)
HA! Short indeed.. but the post asked for a character based result. But koodos if the string data type is not really needed.
You do realize that the RIGHT function returns a string?
My code simply takes advantage of the fact that the integer expression is automatically cast to a character string.
From SQL Server 2000 Books Online:
[font="Arial Narrow"]RIGHT
Returns the part of a character string starting a specified number of integer_expression characters from the right.
Syntax
RIGHT ( character_expression , integer_expression )[/font]
Viewing 11 posts - 1 through 11 (of 11 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy