SQL, удалите появление запятой в конце списка, разделенного запятыми

#sql-server-2005

#sql-server-2005

Вопрос:

Как мы можем удалить последнюю запятую из списка, разделенного запятыми, в SQL-запросе?

Я сделал пример, в котором я получаю строку, разделенную запятыми, в качестве выходных данных. Но я обнаружил, что запятая ставится после окончания строки. Я пытался обрезать его, но не смог этого сделать.Может ли кто-нибудь помочь мне избавиться от этого?

моя результирующая строка выглядит следующим образом

например: — немного текста, еще немного текста, еще больше, еще больше,

Ответ №1:

 DECLARE @my_string nvarchar(128)
SET @my_string = N'Some Text, Some More Text, Even More, Yet More,'

select SUBSTRING(@my_string, 1, LEN(@my_string) - 1)
  

Если вам потребуется дополнительная помощь, вы должны предоставить дополнительную информацию.

Ответ №2:

 Update MyTable
Set MyField = Case
                When Right(MyField,1) = ',' Then Substring( MyField, 1, Len(MyField) - 1 )
                Else MyField
                End
  

Кстати, другой вариант:

 Update MyTable
Set MyField =  Substring( MyField, 1, Len(MyField) - 1 )
Where Value Like '%,'
  

Тестовый скрипт:

 Declare @TestValues Table ( Value nvarchar(100) not null )

Insert @TestValues(Value) Values( 'XYZZY' )
Insert @TestValues(Value) Values( 'PLUGH' )
Insert @TestValues(Value) Values( 'SpiffyValueWithComma,' )

Select Case
        When Right(Value,1) = ',' Then Substring( Value, 1, Len(Value) - 1 )
        Else Value
        End
From @TestValues
  

Результаты:

XYZZY
ПЛУГ
SpiffyValueWithComma

Обновить

Одна из возможностей заключается в том, что ваше конечное значение — это не запятая, а скорее запятая и пробел. Если это так, то вам нужно изменить свой запрос следующим образом:

 Update MyTable
Set MyField = Substring( MyField, 1, Len(MyField) - 1 )
Where Value Like '%,'
    Or Value Like '%, '
  

Комментарии:

1. @Febin — Если это не работает, значит, что-то не так с вашими данными. Можете ли вы предоставить несколько примеров входных данных, в частности тех, где приведенное выше предположительно возвращает неверный результат?

2. — Я протестировал ваш тестовый скрипт. Работает нормально, спасибо за хороший ответ. Но я довольно смущен, потому что в моей strored процедуре я возвращаю свое значение в виде списка, разделенного запятой. Я просто хочу удалить последнюю запятую из списка, поэтому здесь не нужна никакая таблица. Как я могу это исправить

3. @Febin — Вы уверены, что конечное значение является исключительно и конкретно запятой, а не запятой и пробелом? Я обновил свой ответ, чтобы справиться с этим сценарием.