删除临时变量中的前导零

时间:2014-11-26 11:33:43

标签: sql-server

我在sql中声明了一个临时变量。它包含字符串A001,A011,A002,A14,A158。

我想删除零以获得以下输出

A1, A2, A11, A14, A158

2 个答案:

答案 0 :(得分:0)

通过一些字符串操作,您可以实现自己的目标。

因此,如果您从A010获取第一个字符:

DECLARE @SomeValue nvarchar(10) = 'A010'

SELECT LEFT(@SomeValue, 1) -- gives you 'A'

然后通过删除第一个字符并将其转换为整数来获取数字部分:

SELECT CONVERT(INT, SUBSTRING(@SomeValue, 2, LEN(@SomeValue) - 1)) -- returns 10

这将为您删除前导零。然后,您只需将其转换回字符串并将其附加到第一个字符。

完整的解决方案:

DECLARE @T1 TABLE ( SomeValue NVARCHAR(10) )

INSERT  INTO @T1
        ( SomeValue )
VALUES  ( 'A001' ),
        ( 'A011' ),
        ( 'A002' ),
        ( 'A14' ),
        ( 'A158' ),
        ( 'A010' )

SELECT  SomeValue AS Original ,
        LEFT(SomeValue, 1)
        + CONVERT(NVARCHAR(10), 
          CONVERT(INT, SUBSTRING(SomeValue, 2, LEN(SomeValue)-1))) RemoveLeadingZeroes
FROM    @T1

答案 1 :(得分:-1)

使用此:(我使用XML替换提取每个单词,然后通过将0010转换为10来替换0&0并将值A + 10组合以获得A10并再次组合每个单词以形成A1,A2 ,A14 ..)

DECLARE @string VARCHAR(MAX),

@Split CHAR(1),
@X xml

SELECT @string = 'A001, A011, A002, A14, A158',
@Split = ', '

SELECT @X = CONVERT(xml,'<root><s>' + REPLACE(@string,@Split,'</s><s>') + '</s></root>')

SELECT 
 STUFF(((SELECT ', ' + CAST(Result AS VARCHAR(100)) FROM 
    (SELECT SUBSTRING(LTRIM(Result), 1, 1) + 
           CAST(CAST(SUBSTRING(LTRIM(Result), 2, LEN(LTRIM(Result))) AS INT) AS VARCHAR) AS Result 
     FROM
         (SELECT T.c.value('.','varchar(max)') AS Result
          FROM @X.nodes('/root/s') T(c)) AS NewResult) 
    AS NewResult1
FOR xml path(''), type).value('.','varchar(max)')), 1,2,'')
AS FinalResult

SqlFiddle:Demo