SQL Server:字符串中金额上方的第一个数字



我有一串数字的字段。 我有代码来提取第一个数字(CONVERT([int],left([Times],(2)))),但我还需要代码来提取 45 以上的第一个数字,例如

10 20 50 60 70
11 80
34 47
20
30 60 80

类型:瓦尔查尔。

要返回:

50
80
47
Null
60

由于琴弦的长度不同,我正在努力想出一个可行的解决方案。 任何帮助将不胜感激。

您可以尝试使用基于 JSON 的方法。您需要使用字符串替换将输入数据转换为有效的 JSON 数组(10 20 50 60 70转换为[10,20,50,60,70](:

桌子:

CREATE TABLE Data (
TextData varchar(100)
)
INSERT INTO Data
(TextData)
VALUES   
('10 20 50 60 70'),
('11 80'),
('34 47'),
('20'),
('30 60 80')

陈述:

SELECT d.TextData, j.[value]
FROM Data d
OUTER APPLY (
SELECT TOP(1) [value]
FROM OPENJSON(CONCAT('[', REPLACE(d.TextData, ' ', ','), ']'))
WHERE CONVERT(int, [value]) > 45
ORDER BY CONVERT(int, [key])
) j

结果:

---------------------
TextData        value
---------------------
10 20 50 60 70  50
11 80           80
34 47           47
20  
30 60 80        60

最新更新