SQL: выберите последние значения перед пробелом в строке

#sql

#sql

Вопрос:

У меня есть набор таких строк:

 CAP BCP0018 36
MFP ACZZ1BD 265
LZP FEI-12 3
  

Мне нужно извлечь только последние значения справа и перед пробелом, например:

 36
265
3
  

как будет выглядеть оператор select? Я попытался использовать приведенную ниже инструкцию, но это не сработало.

 select CHARINDEX(myField, ' ', -1)
FROM myTable;
  

Комментарии:

1. Пометьте свой вопрос базой данных, которую вы используете.

Ответ №1:

Возможно, самый простой метод в SQL Server:

 select t.*, v.value
from t cross apply
     (select top (1) value
      from string_split(t.col, ' ') 
      where t.col like concat('% ', val)
     ) v;
  

Возможно, это не самый эффективный метод. Вы, вероятно, использовали бы:

 select right(t.col, charindex(' ', reverse(t.col)) - 1)
  

Примечание: если пробелов нет, то для предотвращения ошибки:

 select right(t.col, charindex(' ', reverse(t.col)   ' ') - 1)
  

Ответ №2:

Поскольку вы упомянули CHARINDEX(), я предполагаю, что вы используете SQL Server. Попробуйте ниже

 declare @table table(col varchar(100))
insert into @table values('CAP BCP0018 36')
insert into @table values('MFP ACZZ1BD 265')
insert into @table values('LZP FE-12 3')

SELECT REVERSE(LEFT(REVERSE(col),CHARINDEX(' ',REVERSE(col)) - 1)) FROM @table
  

Используемые функции

CHARINDEX ( expressionToFind , expressionToSearch) : возвращает позицию ПЕРВОГО появления выражения внутри другого выражения.

ОСТАЛОСЬ ( character_expression , integer_expression ) : возвращает левую часть символьной строки с указанным количеством символов.

REVERSE ( string_expression) : возвращает обратный порядок строкового значения