我有一串数字的字段。 我有代码来提取第一个数字(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