#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 — Вы уверены, что конечное значение является исключительно и конкретно запятой, а не запятой и пробелом? Я обновил свой ответ, чтобы справиться с этим сценарием.