2016-01-13 3 views
5

У меня есть данные, у которых есть ведущие и конечные пробелы в строке. при хранении этих данных в базе данных я хочу обрезать пространство в самом запросе перед хранением в БД.Как обрезать ведущие и конечные области табуляции в запросе MSSQL

Нормальные пробелы должным образом обрезаются с помощью функции RTRIM и LTRIM, но если строка содержит пространство вкладок, она не обрезает пространство вкладок из входной строки.

Может ли кто-нибудь помочь мне получить строку с подстриженными язычками от ведущих и конечных.

+1

заменить все вкладки пробелами, обрезать промежуточную строку, а затем преобразовать пробелы обратно в вкладки? –

ответ

6

Заменить код ASCII для вкладки (9):

replace(@str, char(9), '') 

К удалить только внешние вкладки, сначала изменить их к чему-то, что не существует в ваших данных (я использую серию из четырех пространств в этот пример), то RTrim/LTRIM, а затем преобразовать ту же самую последовательность обратно в закладках:

replace(ltrim(rtrim(replace(@str, char(9), ' '))),' ', char(9)); 
+1

это заменит все пространство табуляции между строкой, а я хочу только начальное и конечное пространство. – user3876801

+0

@ user3876801 Я обновил ответ, включив этот сценарий. – morgb

+0

о производительности, если данные очень большие, поскольку для преобразования данных используется функция замены времени. – user3876801

0

Попробуйте это:

DECLARE @InputString nvarchar(50) = CHAR(9) + CHAR(9) + ' 123'+ 'abc ' + CHAR(9); 
SELECT @InputString AS InputString 
     ,REVERSE(RIGHT(REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1)), LEN(REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1))) - PATINDEX('%[^'+CHAR(9)+']%', REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1))) + 1)) AS OutputString 
; 

Возможно, вам нужно реорганизовать его как функцию. Обратите внимание, что он может работать только выше Sql Server 2008. Вы можете заменить CHAR (9) на любой символ, который вам нравится обрезать.

Смежные вопросы