Как заменить первый и последний символ столбца в sql server?

у меня есть столбец базы данных и ее дают строку вида ,Recovery, Pump Exchange,.

Я хочу, чтобы удалить первую и последнюю запятую из строки.

Ожидаемый Результат : Recovery, Pump Exchange.

7 ответов


можно использовать SUBSTRING для этого:

SELECT
    SUBSTRING(col, 2, LEN(col)-2)
FROM ...

очевидно, что еще лучшим подходом было бы не ставить там в первую очередь ведущие и конечные запятые, если это вариант.

Я хочу удалить последнюю и первую запятую, только если в противном случае нет.

выражение становится немного сложнее, но идея остается той же:

SELECT SUBSTRING(
    col
,  CASE LEFT(@col,1) WHEN ',' THEN 2 ELSE 1 END
,  LEN(@col) -- Start with the full length
             -- Subtract 1 for comma on the left
      - CASE LEFT(@col,1) WHEN ',' THEN 1 ELSE 0 END 
             -- Subtract 1 for comma on the right
      - CASE RIGHT(@col,1) WHEN ',' THEN 1 ELSE 0 END
)
FROM ...

в качестве альтернативы методу dasblinkenlight вы можете использовать replace:

DECLARE @words VARCHAR(50) = ',Recovery, Pump Exchange,'
SELECT REPLACE(','+ @words + ',',',,','')

использование LEN может привести к обратным результатам, потому что LEN игнорирует конечные пробелы. Они могут быть добавлены из - за ansi_padding по умолчанию ON. Итак, вам понадобится RTRIM.

для полноты, я добавил LTRIM тоже...

REVERSE(SUBSTRING(REVERSE(RTRIM(LTRIM(SUBSTRING(MyCol, 2, 8000)))), 2, 8000))

использовать Substring():

SET @String=SUBSTRING(@String ,2,Len(@String)-2)

SUBSTRING() возвращает часть выражения.

синтаксис:

SUBSTRING ( expression ,start , length )

попробуйте так:

if(Substring(@mykeyword, 1,1) = ',' and Substring(@mykeyword, LEN(@mykeyword) - 1, LEN(@mykeyword))=',')
SET @mykeyword = Substring(@mykeyword, 2, LEN(@mykeyword) - 2)

SELECT LEFT(RIGHT(',Recovery, Pump Exchange,',LEN(',Recovery, Pump Exchange,')-1),LEN(',Recovery, Pump Exchange,')-2)

для удаления того же символа вы можете использовать ниже системную функцию отделка

только с 2017

DECLARE @str VARCHAR(MAX) = '[REMOVE THIS CLOSE BRACKET]'

SELECT TRIM('[]' FROM @str)

но для удаления разных символов вам нужно использовать подстроку

SELECT SUBSTRING(@str,2,LEN(@str)-2)