Лучшие альтернативы для извлечения последних целочисленных данных из заданной строки с сервера SQL - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь извлечь только целую часть данных в конце этой строки.

Пример: `/ coronavirus / 07-2020covid19 / 58241 '

Мой код:

select  
    reverse(substring(reverse('/coronavirus/07-2020covid19/58241'),
                      1 ,
                      patindex('%/%', reverse('/coronavirus/07-2020covid19/58241')) - 1))

Вывод: 58241

Статистика выполнения для вышеуказанного оператора:

введите описание изображения здесь

Я просто хочу знать, как лучше всего это сделать, поскольку у меня около 25,5 миллионов строк. Поэтому я в основном ищу оптимальное быстрое решение с меньшей нагрузкой на SQL сервер.

1 Ответ

2 голосов
/ 13 июля 2020

Один из способов - разбить строку:

select s.value
from string_split('/coronavirus/07-2020covid19/58241', '/') s
where '/coronavirus/07-2020covid19/58241' like '%/' + s.value;

Если вы также хотите добавить, что это число, вы можете добавить:

s.value not like '%[^0-9]%'

Если это столбец в таблице, вы должны использовать apply:

select t.*, s.value
from t cross apply
     split_part(t.col) s
where t.col like '%/' + s.value;

Другой метод ищет последний '/'. Я бы использовал stuff():

select stuff(str, 1, len(str) - charindex('/', reverse(str)) + 1, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...