SQL Сервер: первое число выше суммы в строке - PullRequest
0 голосов
/ 10 января 2020

У меня есть поля со строкой чисел. У меня есть код для извлечения первого числа (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

Из-за разной длины струн я изо всех сил пытаюсь найти работоспособное решение. Любая помощь будет оценена.

1 Ответ

2 голосов
/ 10 января 2020

Вы можете попытаться использовать подход, основанный на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...