首页 > 解决方案 > SQL Server:字符串中金额以上的第一个数字

问题描述

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

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

类型:varchar。

返回:

50
80
47
Null
60

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

标签: sql-serverstringnumbers

解决方案


您可以尝试使用基于 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

推荐阅读