我在sql中声明了一个临时变量。它包含字符串A001,A011,A002,A14,A158。
我想删除零以获得以下输出
A1, A2, A11, A14, A158
答案 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