#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) : возвращает обратный порядок строкового значения