如何在nvarchar字段中像这样的0/0递增第一个数字

问题描述 投票:-1回答:1

我可以这样增加数字:

SELECT SUBSTRING('0/0', 1,1) +1 AS ExtractString;

但是我需要它返回整数,并且每次只递增第一个数字。

sql sql-server ssms
1个回答
0
投票

可能有点过于复杂,但是,我持“悲观”观点,认为可能存在不良数据。使用标量值,可以正常工作:

DECLARE @YourString varchar(5) = '0/0'

SELECT CONCAT(TRY_CONVERT(int,LEFT(V.YourString,CI.I)) +1, STUFF(V.YourString,1,ISNULL(CI.I,0),'')) AS ExtractString
FROM (VALUES(@YourString))V(YourString)
     CROSS APPLY(VALUES(NULLIF(CHARINDEX('/',V.YourString),0)-1))CI(I); --NULLIF incase of lack of /

如果使用数据集:

SELECT CONCAT(TRY_CONVERT(int, LEFT(V.YourString, CI.I)) + 1, STUFF(V.YourString, 1, ISNULL(CI.I, 0), '')) AS ExtractString
FROM (VALUES ('1/2'),
             ('10/7'),
             ('9'),
             ('4/q'),
             ('b/12')) V (YourString)
     CROSS APPLY (VALUES (NULLIF(CHARINDEX('/', V.YourString), 0) - 1)) CI (I); --NULLIF incase of lack of /

以上返回以下内容:

ExtractString
-----
11/7
9
5/q
/12

注意,最后一个值返回'/12',因为'b'无法转换为int

© www.soinside.com 2019 - 2024. All rights reserved.