Tuesday, January 27, 2015

Định dạng với các số 0 (zero) .

-- Add/pad leading zeros to numeric string for a total length of 12 - QUICK SYNTAX
DECLARE @Amount varchar(32) = '78912'
SELECT STUFF(@Amount, 1, 0, REPLICATE('0', 12 - LEN(@Amount))) -- 000000078912
------------------------
-- 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
*/


The BEST 70-461 SQL Server 2012 Querying Exam Prep Book!
-- 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
*/
------------

Source : sqlusa

No comments:

Post a Comment