Sql server 删除临时变量中的前导零

Sql server 删除临时变量中的前导零,sql-server,Sql Server,我在sql中声明了一个临时变量。它包含一个字符串A001、A011、A002、A14、A158 我想删除零以获得以下输出 A1, A2, A11, A14, A158 使用这个:我使用XML替换提取每个单词,然后通过将0010转换为10来替换0,并将值A+10组合为A10,再将每个单词组合为A1、A2、A14 DECLARE @string VARCHAR(MAX), @Split CHAR(1), @X xml SELECT @string = 'A001, A011, A002, A1

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

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

A1, A2, A11, A14, A158

使用这个:我使用XML替换提取每个单词,然后通过将0010转换为10来替换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:

您可以通过一些字符串操作实现您想要的

因此,如果从A010中选取第一个字符:

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

SELECT CONVERT(INT, SUBSTRING(@SomeValue, 2, LEN(@SomeValue) - 1)) -- returns 10
这将为您删除前导零。然后只需将其转换回字符串,并将其附加到第一个字符上

完整的工作解决方案:


你所有的值在数字部分之前都有一个字母吗?如果有B001,B010会发生什么?是的,我在数字部分之前只有一个字母可能是重复的,而不是完全重复的。这里的数据不是表格形式。它是一个字符串它从A010的字符串中删除所有零我想要结果A10,但它打印A1I有以下字符串A001、A011、A002、A14、A158、A010,并想要以下输出A1、A11、A2、A14、A158,A10@user2148124,答案会让你得到准确的结果。请检查它。嗨@ USE2148124如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。@Veera,因为您编辑了它。我对答案的前一个版本进行了评论。他所要求的是将单个字符串A001、A011、A002、A14、A158更改为A1、A2、A11、A14、A158。不是一个目录。我错了,我读它是因为我有一个包含这些值的临时表。
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