sql-server - 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
由于字符串的长度不同,我正在努力想出一个可行的解决方案。任何帮助将不胜感激。
解决方案
您可以尝试使用基于 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
推荐阅读
- python - 如何使用pyqt4更改QScrollarea中的滚动条颜色
- firebase - Firebase 列表未在设置状态下更新
- r - 如何根据(元素)选定的相邻列计算重复的行数
- c# - ITextSharp 在词尾添加三个点
- java - 你能用注解构建一个FilterChain吗?
- javascript - Angular build .js 文件的导入与 React .js 冲突
- continuous-integration - 如何在 Cypress 中更改 CI 的环境变量?
- javascript - 为 TestCafe 异步创建动态测试
- sas - SAS EG 导出 Excel 并通过
- javascript - React:直接从函数内部渲染列表对象