2016-11-28 9 views
0

Моя строка ввода вКак заменить символ '&' на последнюю запятую в строке?

Declare @ListOfContactType nvarchar(1000) 
SET @ListOfContactType = 'Customer,Supplier,Financier,Employee' 

Пожалуйста, помогите мне, чтобы получить выход в 'Customer,Supplier,Financier & Employee'

Примечание: строка в @ListOfContactType может отличаться.

+0

Вы можете принять любой один ответ ниже. Если это поможет вам. – Buddi

ответ

0
Declare @ListOfContactType nvarchar(1000) 
Declare @LastOccuredAt int 
SET @ListOfContactType = 'Customer,Supplier,Financier,Employee' 
SET @LastOccuredAt=LEN(@ListOfContactType) - CHARINDEX(',',REVERSE(@ListOfContactType)) 
print substring(@ListOfContactType,1,@LastOccuredAt) + ' & ' + substring(@ListOfContactType,@LastOccuredAt +2,(len(@ListOfContactType)[email protected])) 
1

Найдите последнее совпадение, с помощью CHARINDEX и заменил его & с помощью stuff функции.

DECLARE @LISTOFCONTACTTYPE NVARCHAR(1000) 

SET @LISTOFCONTACTTYPE = 'CUSTOMER,SUPPLIER,FINANCIER,EMPLOYEE' 

SELECT STUFF(@LISTOFCONTACTTYPE, 
      LEN(@LISTOFCONTACTTYPE) - CHARINDEX(',', REVERSE(@LISTOFCONTACTTYPE))+1, 1, ' & ') AS OUT_PUT 
+0

, Это дает следующий результат с запятой. Заказчик, Поставщик, Финансирование &, Сотрудник – Mansoor

+0

@Mansoor Обновлено сообщение. – Buddi

0

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

LEN(@ListOfContactType) - CHARINDEX(',', REVERSE(@ListOfContactType)) 

Дает вам эту должность. Затем вы можете заменить запятую на STUFF, но имейте в виду, что вам нужно исправить положение там для одного символа. Таким образом,

STUFF(@ListOfContactType, 1 + LEN(@ListOfContactType) - CHARINDEX(',', REVERSE(@ListOfContactType)), 1, ' & ') 

должен предоставить желаемый результат.

1

Решение:

Declare @ListOfContactType nvarchar(1000); 
Declare @Position int; 

Set @ListOfContactType = 'Customer,Supplier,Financier,Employee'; 
Set @Position = CHARINDEX(',', REVERSE(@ListOfContactType)); 

select REVERSE(STUFF(REVERSE(@ListOfContactType), @position, 1, '&')) 

Ожидаемый результат:

Customer,Supplier,Financier&Employee 

Reverse строку, чтобы получить индекс, чем обратный снова после замены ожидаемого выхода.

0

Простой и очень простой запрос:

Declare @ListOfContactType nvarchar(1000) 
SET @ListOfContactType = 'Customer,Supplier,Financier,Employee' 

select reverse(stuff(reverse(@ListOfContactType),charindex(',',reverse(@ListOfContactType)),1,' & '))