#sql-server
#sql-сервер
Вопрос:
У меня есть строка, мне нужно получить символы в квадратных скобках
declare @String Varchar(50)
Set @String ='C910-C916[02]'
Select
Substring(Rtrim(Ltrim(@String)), CHARINDEX('[', Rtrim(Ltrim(@string))) 1, (len(@string) - 1)) val3
Вывод:
vol3
02]
Но ожидаемый результат
vol3
02
Что не так в этом запросе?
Комментарии:
1. Ваш последний параметр в функции substring (которая определяет длину подстроки, которую вы хотите взять) — это,
(len(@string)-1)
который12
, вам нужны только два. Если длина является динамической, вам придется ее вычислить.2. Третьим параметром
SUBSTRING
является length , для которого вы указалиlen(@string)-1
(длина всей вашей строки минус1
).
Ответ №1:
Вы можете использовать следующее:
DECLARE @String VARCHAR(50)
SET @String ='C910-C916[02]'
-- output: 02
SELECT SUBSTRING(RTRIM(LTRIM(@String)), CHARINDEX('[', RTRIM(LTRIM(@String))) 1, CHARINDEX(']', RTRIM(LTRIM(@String))) - CHARINDEX('[', RTRIM(LTRIM(@String)))-1) val3
С помощью этого решения вы также можете получить число в середине, если текст:
DECLARE @String VARCHAR(50)
SET @String ='C910-C916[02] Hello World'
-- output: 02
SELECT SUBSTRING(RTRIM(LTRIM(@String)), CHARINDEX('[', RTRIM(LTRIM(@String))) 1, CHARINDEX(']', RTRIM(LTRIM(@String))) - CHARINDEX('[', RTRIM(LTRIM(@String)))-1) val3
Комментарии:
1. Для меня это нормально работает. Спасибо, Себастьян Брош
Ответ №2:
Вы также могли бы сделать:
SELECT PARSENAME(REPLACE(@String,'[','.['),1);