WinSQL » Knowledge base
|Subject:||Padding leading zeros to an integer|
|Creation date:||7/29/09 3:27 PM|
|Last modified on:||12/10/11 4:41 AM|
Assume that you have an integer in your database and want to pad with leading zeros to make it a fixed length column.
The table design is as follows.
create table Sample(id integer)
There are 4 rows in this table containing following values:
Our goal is to write a query that will display the following results.
Following query will produce the results you like. This sample is
according to the syntax understood by Microsoft SQL Server. Modify the
functions appropriately if you are using any other database.
select CASE LEN(CAST(id as VARCHAR(5)))
WHEN 0 THEN '0000'
WHEN 1 THEN '000' + CAST(id as VARCHAR(5))
WHEN 2 THEN '00' + CAST(id as VARCHAR(5))
WHEN 3 THEN '0' + CAST(id as VARCHAR(5))
else CAST(id as VARCHAR(5))
Posted by The Sinister Minister on 4/26/11 1:25 PM
I find that the case method can become cumbersome when dealing with longer number strings. I tend to use something like this:
SELECT RIGHT('00000' + CAST(id as VARCHAR(5)), 5)
This is (again) in SQL Server format. For DB2, this would work:
SELECT RIGHT('00000' + RTRIM(CAST(CAST(id as CHAR(5)) AS VARCHAR(5))), 5)
DB2 (v8 anyway) does not allow casting from INTEGER directly to VARCHAR so we have to pre-cast it to CHAR and then RTRIM to remove the trailing spaces.
Posted by Data Geek on 4/25/12 12:10 PM
For DB2, use the || operator instead of +. My data needs to be left zero-padded up to 6 char max length. This DB2 solution works for me:
SELECT RIGHT('000000' || RTRIM(CAST(CAST(col as CHAR(6)) AS VARCHAR(6))), 6) as id1
col = 42341
id1 = 042341
col = 5
id1 = 000005
col = 389
id1 = 000389
The Teradata version is shorter:
SELECT col (format'999999') (char(6)) as id1
Posted by chamath on 7/21/12 5:53 AM
this is better
select char(cast(238 as decimal(6,0))) from sysibm.sysdummy1
Posted by asm on 11/29/11 6:04 AM
select values in to @i then use ...
set @ID = 'IN'+ REPLICATE('0',11 - LEN(@i)) + cast(@i as varchar (12))
Posted by guest on 10/1/13 3:39 AM
I think this is the simplest... it works on DB2:
select digits(dec(id, 4, 0)) from Sample
Add a comment to this document
Do you have a helpful tip related to this document that you'd like to share
with other users? Please add it below. Your name and tip will appear at the
end of the document text.