How to pad a numeric type column with leading zeros?
Execute the following Microsoft SQL Server T-SQL example scripts to demonstrate SQL padding of numbers and strings with leading and trailing zeros as well as with other designated characters, and techniques for removing (trim) leading zeros.
– SQL Server leading zero – T-SQL padding numbers – lpad tsql – sql pad zero
SELECT ListPrice,
Padded=RIGHT(’0000000000′ + CONVERT(VARCHAR,ListPrice), 10)
FROM AdventureWorks2008.Production.Product WHERE ListPrice > 0.0
————
– T SQL pad leading zeros – transact sql leading zeros
SELECT ProductID, ReorderPoint = REPLACE(STR(ReorderPoint, 6), SPACE(1), ’0′)
FROM AdventureWorks2008.Production.Product
/* ProductID ReorderPoint
1 000750
2 000750
3 000600 */
————
– SQL Server leading zero – SQL leading zeros – sql server pad leading zero
USE AdventureWorks2008;
DECLARE @Number int = 789
SELECT RIGHT (’000000′+ CAST (@Number AS varchar), 6)
– 000789
————
USE AdventureWorks;
– SQL padding salary pay rate money data type with leading zeroes
– SQL left pad number – prefix number with zeros – sql server leading zero
– SQL convert number to text – cast number to varchar string
SELECT EmployeeID,
Rate,
PaddedRate = RIGHT(REPLICATE(’0′,8) + CAST(Rate AS VARCHAR(8)),8)
FROM HumanResources.EmployeePayHistory
/* Partial results
EmployeeID Rate PaddedRate
1 12.45 00012.45
2 13.4615 00013.46
3 43.2692 00043.27
*/
– SQL zero padding ListPrice money data type – t sql leading zero
– SQL left pad – T-SQL string concatenation – sql concat
– SQL convert number to string – pad numeric with zeros
SELECT ProductID,
ListPrice,
PaddedListPrice = RIGHT(REPLICATE(’0′, 8) + CAST(ListPrice AS VARCHAR(8)),8)
FROM Production.Product
/* Results sample
ProductID ListPrice PaddedListPrice
965 742.35 00742.35
*/
– SQL month leading zero – sql pad month number with zero
SELECT RIGHT(’0′ + convert(varchar(2), month(GetDate())), 2)
– 06
———-
– trim leading zeros – sql trim leading zeros – remove leading zeros sql
USE AdventureWorks2008;
DECLARE @num varchar(32)= ’00091234560′
SELECT right(@num, len(@num)+1 – patindex(‘%[^0]%’, @num))
– 91234560
————
– SQL pad numeric data type – SQL pad digits – transact sql leading zeros
– SQL pad with leading zeroes – append leading zeros – T-SQL top function
– SQL pad with trailing zeroes – MSSQL append trailing zeros
– SQL cast money to numeric – cast numeric to string – mssql newid function
SELECT TOP (5)
ProductName = Name,
ListPrice = RIGHT(REPLICATE(’0′, 10)
+ CAST(CAST(ListPrice AS NUMERIC(9,3)) AS VARCHAR) ,10)
FROM AdventureWorks.Production.Product
ORDER BY NEWID()
/* ProductName ListPrice
LL Mountain Frame – Black, 40 000249.790
HL Touring Frame – Yellow, 46 001003.910
Bike Wash – Dissolver 000007.950
Metal Sheet 7 000000.000
HL Road Frame – Red, 56 001431.500
*/
———-
– PAD leading zeros function – sql server leading zeros – UDF
USE AdventureWorks2008;
GO
CREATE FUNCTION fnPadNumber
(@n DECIMAL(26,2),
@length TINYINT)
RETURNS VARCHAR(32)
AS
BEGIN
RETURN ( replicate(’0′,@length – len(convert(VARCHAR(32),@n))) +
convert(VARCHAR(32),@n))
END
GO
SELECT dbo.fnPadNumber(1234567890.12,16)
– 0001234567890.12
————
– T SQL computed column zero padding – sql generate alphanumeric sequence
USE tempdb; — SQL Server 2008 T-SQL
CREATE TABLE Celebrity (
ID INT IDENTITY ( 1 , 1 ) PRIMARY KEY,
CelebrityID AS ‘CEL’ + RIGHT(’0000′ + CAST( ID as varchar),5), — computed column
FirstName VARCHAR(32),
LastName VARCHAR(32),
ModifiedDate DATE DEFAULT getdate())
GO
INSERT Celebrity
(FirstName,
LastName)
VALUES(‘Jennifer’,'Aniston’),
(‘Drew’,'Barrymore’),
(‘Diana’,'Princess of Wales’),
(‘Tom’,'Jones’),
(‘Lucille’,'Ball’),
(‘Frank’,'Sinatra’),
(‘Elvis’,'Presley’)
SELECT * FROM Celebrity
GO
– CelebrityID is zero padded alphanumeric sequence
/*
ID CelebrityID FirstName LastName ModifiedDate
1 CEL00001 Jennifer Aniston 2012-07-04
2 CEL00002 Drew Barrymore 2012-07-04
3 CEL00003 Diana Princess of Wales 2012-07-04
4 CEL00004 Tom Jones 2012-07-04
5 CEL00005 Lucille Ball 2012-07-04
6 CEL00006 Frank Sinatra 2012-07-04
7 CEL00007 Elvis Presley 2012-07-04
*/
– Cleanup demo
DROP TABLE Celebrity
GO
————
– SQL removing leading zeros when no spaces in string – trimming Leading Zeros
USE AdventureWorks2008;
DECLARE @NumberString varchar(16)=’000000246′
SELECT REPLACE(LTRIM(REPLACE(@NumberString, ’0′, ‘ ‘)), ‘ ‘, ’0′)
– 246
————
– SQL remove leading zeros – sql trim leading zeros – numeric test
DECLARE @StringWithLeadingZeros VARCHAR(12) = ’000000654321′
SELECT CAST(CAST(@StringWithLeadingZeros AS INT) AS VARCHAR(10))
WHERE ISNUMERIC (@StringWithLeadingZeros)=1
– 654321
————
– LPAD & RPAD string scalar-valued user-defined functions (UDF)
USE AdventureWorks;
GO
– Left pad string function
CREATE FUNCTION LPAD
(@SourceString VARCHAR(MAX),
@FinalLength INT,
@PadChar CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN
(SELECT Replicate(@PadChar,@FinalLength – Len(@SourceString)) + @SourceString)
END
GO
– T-SQL Test left padding
SELECT LeftPaddedString = dbo.LPAD(Cast(84856 AS VARCHAR),12,’0′)
GO
– 000000084856
– MSSQL right pad string function
CREATE FUNCTION RPAD
(@SourceString VARCHAR(MAX),
@FinalLength INT,
@PadChar CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN
(SELECT @SourceString + Replicate(@PadChar,@FinalLength – Len(@SourceString)))
END
GO
– Test right padding
SELECT RightPaddedString = dbo.RPAD(Cast(84856 AS VARCHAR),12,’*')
GO
– 84856*******
———-
– Padding a money column with leading zeroes – sql convert leading zero
– SQL convert money data type to string
SELECT PaddedUnitPrice = RIGHT(replicate(’0′,20) +
convert(varchar,UnitPrice,1), 20)
FROM Northwind.dbo.Products
/* Partial results
PaddedUnitPrice
00000000000000018.00
00000000000000019.00
00000000000000010.00
00000000000000022.00
*/
/**************** Zero padding other numeric data ****************/
– SQL Server 2008 version featuring the LEFT function
– SQL convert integer to text – convert integer to varchar
USE AdventureWorks2008;
DECLARE @InputNumber int = 522, @OutputLength tinyint = 12
DECLARE @PaddedString char(12)
SET @PaddedString = LEFT( replicate( ’0′, @OutputLength ),
@OutputLength – len( @InputNumber ) ) + convert( varchar(12), @InputNumber)
SELECT PaddedNumber=@PaddedString
/* Result
PaddedNumber
000000000522
*/
– SQL format currency and pad with leading spaces
– SQL Server lpad to 9 characters
SELECT TOP (3) ProductName=Name,
Price= CONVERT(char(9), ListPrice, 1)
FROM Production.Product
WHERE ListPrice > 0.0 ORDER BY Newid()
/*
ProductName Price
LL Touring Frame – Blue, 62 333.42
LL Road Seat Assembly 133.34
Road-250 Red, 58 2,443.35
*/
————
– Padding with zeroes in the middle of string
DECLARE @Number varchar(10)
SET @Number = ’99999′
PRINT ‘TRK’ + REPLICATE(’0′, 12 – LEN(@Number)) + @Number
SELECT [Zero Padding]=’TRK’ + REPLICATE(’0′, 12 – LEN(@Number)) + @Number
– Result: TRK000000099999
– Applying the STUFF string function for zero padding
– SQL convert integer data type to string
DECLARE @SerialNo int, @OutputSize tinyint
SET @OutputSize = 10
SET @SerialNo = 6543
SELECT PaddedSerialNo = STUFF(replicate(’0′, @OutputSize),
@OutputSize – len(@SerialNo)+1, len(@SerialNo), convert(varchar(9),@SerialNo))
– Result: 0000006543
– SQL pad integer with 0-s
– SQL str function – numeric to character conversion
SELECT TOP 5
CAST(replace(str(ProductID,6),’ ‘,’0′) AS char(6)) AS ProdID
FROM AdventureWorks.Production.Product
ORDER BY Name
/* Results
ProdID
000001
000879
000712
000003
000002
*/
– SQL pad string with character
– SQL create function
– SQL user-defined function
CREATE FUNCTION dbo.fnLeftPadString (
@Input VARCHAR(255),
@PadChar CHAR(1),
@LengthToPad TINYINT
)
RETURNS VARCHAR(255) AS
BEGIN
DECLARE @InputLen TINYINT
SET @InputLen = LEN(@Input)
RETURN
CASE
WHEN @InputLen < @LengthToPad
THEN REPLICATE(@PadChar, @LengthToPad – @InputLen) + @Input
ELSE @Input
END — CASE
END — UDF
GO
– SQL pad string – left padding – SQL left pad with asterisk
– SQL check printing – SQL currency formatting
DECLARE @DollarAmount varchar(20)
SET @DollarAmount = ’234.40′
SELECT PaddedString=’$'+dbo.fnLeftPadString(@DollarAmount, ‘*’, 10)
GO
– Result: $****234.40
– SQL currency formatting with asterisk-fill
DECLARE @Amount MONEY
SET @Amount = ’3534.40′
SELECT CurrencyFormat = ‘$’ + REPLACE(Convert(char(12),@Amount,1),’ ‘,’*')
– $****3,534.40
SELECT PaddedProductID =
dbo.fnLeftPadString (CONVERT(varchar, ProductID), ’0′, 6),
ProductName=Name,
ListPrice
FROM Production.Product
ORDER BY PaddedProductID
GO
/* Partial results
PaddedProductID ProductName ListPrice
000757 Road-450 Red, 48 1457.99
000758 Road-450 Red, 52 1457.99
000759 Road-650 Red, 58 782.99
000760 Road-650 Red, 60 782.99
000761 Road-650 Red, 62 782.99
*/
———-
– Generating tracking numbers
– SQL pad zeroes
WITH cteSequence(SeqNo)
AS (SELECT 1
UNION ALL
SELECT SeqNo + 1
FROM cteSequence
WHERE SeqNo < 1000000)
SELECT TOP 100 CAST((‘TRK’ + REPLICATE(’0′,
7 – LEN(CAST(SeqNo AS VARCHAR(6)))) +
CAST(SeqNo AS VARCHAR(6))) AS VARCHAR(10)) AS TrackingNo
FROM cteSequence
OPTION (MAXRECURSION 0)
GO
/* Partial results
TrackingNo
TRK0000001
TRK0000002
TRK0000003
TRK0000004
TRK0000005
TRK0000006
TRK0000007
*/
———-
– SQL server pad
– SQL str function
– SQL pad integer
– SQL left pad
SELECT TOP (4) StaffName=LastName+’, ‘+FirstName,
PaddedEmployeeID = REPLACE(STR(EmployeeID, 6, 0), ‘ ‘, ’0′)
FROM HumanResources.Employee e
INNER JOIN Person.Contact c
ON e.ContactID = c.ContactID
ORDER BY NEWID()
/* Results
StaffName PaddedEmployeeID
Dyck, Shelley 000214
Hines, Michael 000039
Ford, Jeffrey 000015
Caron, Rob 000168
*/
– SQL asterisk padding
– SQL pad with asterisk
– SQL right pad
SELECT TOP ( 2 * 2 )
AddressID
, City+REPLICATE(‘*’, 20-len(City)) AS City
, PostalCode
FROM AdventureWorks.Person.[Address]
WHERE LEN(City) <= 20
ORDER by NEWID()
GO
/*
AddressID City PostalCode
13465 Imperial Beach****** 91932
23217 Corvallis*********** 97330
18548 Milwaukie*********** 97222
24893 Goulburn************ 2580
*/
————
————
– SQL left pad any size string Alpha with any length string Beta
————
– SQL user-defined function – UDF – scalar-valued string function
– T-SQL varchar(max)
USE AdventureWorks2008;
GO
CREATE FUNCTION fnMaxPad
(@SourceString VARCHAR(MAX),
@PaddingString VARCHAR(MAX),
@OutputLength INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @WorkString VARCHAR(MAX) =
ISNULL(REPLICATE(@PaddingString,@OutputLength – len(ISNULL(@SourceString,0))),
”) + @SourceString
RETURN RIGHT(@WorkString, @OutputLength)
END
GO
– Execute UDF
SELECT TOP ( 5 ) [SQL Padding Demo] =
dbo.fnMaxPad(CONVERT(VARCHAR,FLOOR(ListPrice)),’_/’,21)
FROM Production.Product
ORDER BY NEWID()
GO
/* Results
SQL Padding Demo
_/_/_/_/_/_/_/2443.00
/_/_/_/_/_/_/_/_/0.00
/_/_/_/_/_/_/_/147.00
/_/_/_/_/_/_/_/_/0.00
_/_/_/_/_/_/_/1003.00
*/
————
– SQL left pad unicode string Alpha with any length unicode string Beta
– MSSQL pad international
– SQL user-defined function – UDF – scalar-value function
– T-SQL nvarchar(max)
USE AdventureWorks2008;
GO
CREATE FUNCTION fnMaxPadInternational
(@SourceString NVARCHAR(MAX),
@PaddingString NVARCHAR(MAX),
@OutputLength INT)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @WorkString NVARCHAR(MAX) =
ISNULL(REPLICATE(@PaddingString,@OutputLength – len(ISNULL(@SourceString,0))),
”) + @SourceString
RETURN RIGHT(@WorkString, @OutputLength)
END
GO
– Execute UDF
SELECT TOP ( 5 ) [SQL Padding Demo] =
dbo.fnMaxPadInternational(LEFT(Description,6),’_/’,21)
FROM Production.ProductDescription
ORDER BY NEWID()
GO
/* Results
SQL Padding Demo
/_/_/_/_/_/_/_/ล้อที่
/_/_/_/_/_/_/_/Roue d
/_/_/_/_/_/_/_/شوكة ط
/_/_/_/_/_/_/_/Each f
/_/_/_/_/_/_/_/Jeu de
*/
————
Reference from sqlusa.com
No comments yet.
Leave a Reply
-
Archives
- April 2011 (1)
- May 2010 (1)
- April 2010 (1)
- February 2010 (3)
- January 2010 (5)
- December 2009 (6)
- November 2009 (13)
- October 2009 (10)
- September 2009 (6)
- August 2009 (7)
- July 2009 (7)
- June 2009 (3)
-
Categories
-
RSS
Entries RSS
Comments RSS