如何增加像这样的 nvarchar 字段中的第一个数字 0/0
How to increment the first number in a nvarchar field like this 0/0
我可以这样增加数字:
SELECT SUBSTRING('0/0', 1,1) +1 AS ExtractString;
但我需要它 return 每次只增加第一个数字的整数。
这 可能 有点过于复杂,但是,我认为 "pessimistic" 认为可能存在错误数据。使用标量值,这有效:
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 /
上面returns下面:
ExtractString
-----
11/7
9
5/q
/12
请注意,最后一个值 returns '/12'
作为 'b'
无法转换为 int
。
我可以这样增加数字:
SELECT SUBSTRING('0/0', 1,1) +1 AS ExtractString;
但我需要它 return 每次只增加第一个数字的整数。
这 可能 有点过于复杂,但是,我认为 "pessimistic" 认为可能存在错误数据。使用标量值,这有效:
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 /
上面returns下面:
ExtractString
-----
11/7
9
5/q
/12
请注意,最后一个值 returns '/12'
作为 'b'
无法转换为 int
。