Удалить последний символ в строке в T-SQL? - PullRequest
127 голосов
/ 11 августа 2009

Как удалить последний символ в строке в T-SQL?

Например:

'TEST STRING'

чтобы вернуть:

'TEST STRIN'

Ответы [ 20 ]

2 голосов
/ 19 апреля 2015

Вы можете создать функцию

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
1 голос
/ 24 января 2013

Получить последний символ

Right(@string, len(@String) - (len(@String) - 1))
1 голос
/ 02 мая 2019

Исходный текст / var может быть нулевым или пустым:

ВЫБРАТЬ ОБРАТНЫЙ (ПОДЧИНКА (ОБРАТНЫЙ (@a), 2, 9999))

1 голос
/ 14 октября 2015

Мой ответ похож на принятый ответ, но он также проверяет наличие пустых и пустых строк.

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
0 голосов
/ 11 сентября 2012

Мне нравится ответ @ 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
0 голосов
/ 15 мая 2013
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)
0 голосов
/ 07 мая 2017

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

DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames

И вывод будет как, THAMIZHMANI

0 голосов
/ 27 октября 2015

Чтобы обновить запись, обрезав последние N символов определенного столбца:

UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause
0 голосов
/ 27 октября 2015

Попробуйте:

  DECLARE @String NVARCHAR(100)
    SET @String = '12354851'
    SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
0 голосов
/ 27 октября 2015
declare @string varchar(20)= 'TEST STRING'
Select left(@string, len(@string)-1) as Tada

выход:

Tada
--------------------
TEST STRIN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...