zoukankan      html  css  js  c++  java
  • Sql Server为数值变量添加删除前导后缀(翻译)

    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 t-sql 脚本添加删除前导,后缀字符。

    -- 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

    -----STUFF(STR,STRAT_INDEX,REPLACE_CHAR_NUMBER,REPLACE_STR) -------------------
    -----STR 目标字符串;START_INDEX: 插入位置(从1开始);
    ;REPLACE_CHAR_NUMBER: 替换字符数;REPLACE_STR:替换字符串

    -- SQL Server leading zero - T-SQL padding numbers - lpad tsql - sql pad zero
    -- 从右数取10位字符。

    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
    -- STR(STR1,Number) 将STR1转换为占Number的字符串,不够的以空白补上左边。

    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
    -- patindex('%[^0]%', @num) 取得带通配符的匹配串'%[^0]%'在@num中的匹配位置(从1开始)

    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

    */

    ----------



    Technical Job Search: CLICK HERE FOR GREAT JOBS!

    -- 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

    */

    ------------



  • 相关阅读:
    yum与rpm常用命令
    centos7更改时区,同步时间
    剑指Offer45:扑克牌顺子(java)
    剑指Offer44:翻转单词顺序列(java)
    剑指Offer43:左旋转字符串(Java)
    剑指Offer42:和为S的两个数字(java)
    剑指Offer41:和为S的连续正数序列(Java)
    剑指Offer39:平衡二叉树(Java)
    剑指Offer40:数组中只出现一次的数字(Java)
    剑指Offer38:二叉树的深度(Java)
  • 原文地址:https://www.cnblogs.com/philzhou/p/2195158.html
Copyright © 2011-2022 走看看