Как удалить последний символ в строке T-SQL
?
Например:
'TEST STRING'
возвращаться:
'TEST STRIN'
sql
sql-server
tsql
Дэвид
источник
источник
Если по какой-то причине ваша логика столбца сложна (случай, когда ... then ... else ... end), то приведенные выше решения заставят вас повторить ту же логику в функции len (). Дублирование одной и той же логики превращается в беспорядок. Если это так, то стоит обратить внимание на это решение. Этот пример избавляется от последней нежелательной запятой. Наконец-то я нашел применение функции REVERSE.
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
источник
NULL
если передана строка, которая короче диапазона удаления, указанного дляSTUFF
. Оберните его в,ISNULL
чтобы получить другое выходное значение для случая пустой строки.select reverse(stuff(reverse('a,b,c,d,'), 2, 1, ''))
Попробуй это:
select substring('test string', 1, (len('test string') - 1))
источник
select substring('test string', 0, len('test string'))
?SUBSTRING ( expression ,start , length )
. Теперь оба запроса возвращают то же самое, потому что нумерация основана на 1, что означает, что первый символ в выражении равен 1. Если start меньше 1, возвращаемое выражение начнется с первого символа, указанного в выражении. ИсточникЕсли ваша строка пуста,
DECLARE @String VARCHAR(100) SET @String = '' SELECT LEFT(@String, LEN(@String) - 1)
тогда этот код вызовет сообщение об ошибке «Неверный параметр длины передан функции подстроки».
Вы можете справиться с этим следующим образом:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
Он всегда будет возвращать результат, а в случае пустой строки - NULL.
источник
Это будет работать, даже если исходный текст / var равен нулю или пуст:
SELECT REVERSE(SUBSTRING(REVERSE(@a), 2, 9999))
источник
select left('TEST STRING', len('TEST STRING')-1)
источник
Если ваш столбец есть,
text
а нетvarchar
, вы можете использовать это:SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
источник
Если вы хотите сделать это за два шага, а не за три из REVERSE-STUFF-REVERSE, вы можете сделать разделитель списка одним или двумя пробелами. Затем используйте RTRIM, чтобы обрезать конечные пробелы, и REPLACE, чтобы заменить двойные пробелы на ','
select REPLACE(RTRIM('a b c d '),' ', ', ')
Однако это не лучшая идея, если исходная строка может содержать внутренние пробелы.
Не уверен в производительности. Каждый REVERSE создает новую копию строки, но STUFF на треть быстрее, чем REPLACE.
также см. это
источник
источник
Я могу предложить этот -хак-;).
select left(txt, abs(len(txt + ',') - 2)) from t;
Демонстрация скрипта SQL Server
источник
вы можете создать функцию
CREATE FUNCTION [dbo].[TRUNCRIGHT] (@string NVARCHAR(max), @len int = 1) RETURNS NVARCHAR(max) AS BEGIN IF LEN(@string)<@len RETURN '' RETURN LEFT(@string, LEN(@string) - @len) END
источник
Попробуй это
DECLARE @String VARCHAR(100) SET @String = 'TEST STRING' SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
источник
Получить последнего персонажа
источник
Это довольно поздно, но, что интересно, еще никогда не упоминалось.
select stuff(x,len(x),1,'')
то есть:
источник
Мой ответ похож на принятый ответ, но он также проверяет наличие Null и Empty String.
DECLARE @String VARCHAR(100) SET @String = 'asdfsdf1' -- If string is null return null, else if string is empty return as it is, else chop off the end character SET @String = Case @String when null then null else (case LEN(@String) when 0 then @String else LEFT(@String, LEN(@String) - 1) end ) end SELECT @String
источник
Мне нравится ответ @Bill-Hoenig; однако я использовал подзапрос, и меня догнали, потому что функция REVERSE требовала двух наборов круглых скобок. Мне потребовалось время, чтобы понять это!
SELECT -- Return comma delimited list of all payment reasons for this Visit REVERSE(STUFF(REVERSE(( SELECT DISTINCT CAST(CONVERT(varchar, r1.CodeID) + ' - ' + c.Name + ', ' AS VARCHAR(MAX)) FROM VisitReason r1 LEFT JOIN ReasonCode c ON c.ID = r1.ReasonCodeID WHERE p.ID = r1.PaymentID FOR XML PATH('') )), 1, 2, '')) ReasonCode FROM Payments p
источник
Чтобы обновить запись путем обрезки последних N символов определенного столбца:
UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause
источник
Попытайся :
DECLARE @String NVARCHAR(100) SET @String = '12354851' SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
источник
declare @string varchar(20)= 'TEST STRING' Select left(@string, len(@string)-1) as Tada
выход:
Tada -------------------- TEST STRIN
источник
Попробуй это,
DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames
И на выходе будет THAMIZHMANI
источник
declare @x varchar(20),@y varchar(20) select @x='sam' select case when @x is null then @y when @y is null then @x else @x+','+@y end go declare @x varchar(20),@y varchar(20) select @x='sam' --,@y='john' DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@x + ', ' ,'') +coalesce(@y+',','') SELECT left(@listStr,len(@listStr)-1)
источник