Programing

T-SQL에서 문자열의 마지막 문자를 제거 하시겠습니까?

lottogame 2020. 6. 28. 18:27
반응형

T-SQL에서 문자열의 마지막 문자를 제거 하시겠습니까?


에서 문자열의 마지막 문자를 어떻게 제거 T-SQL합니까?

예를 들면 다음과 같습니다.

'TEST STRING'

돌려 주다:

'TEST STRIN'

예 :

DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'

-- 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

어떤 이유로 열 논리가 복잡한 경우 (... when ... else ... end ...) 위의 솔루션으로 인해 len () 함수에서 동일한 논리를 반복해야합니다. 동일한 논리를 복제하면 엉망이됩니다. 이것이 사실이라면 이것은 주목할만한 해결책입니다. 이 예는 마지막 원치 않는 쉼표를 제거합니다. 마침내 REVERSE 기능을 사용했습니다.

select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))

이 시도:

select substring('test string', 1, (len('test string') - 1))

줄이 비어 있으면

DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)

이 코드는 오류 메시지 '하위 문자열 함수에 잘못된 길이 매개 변수가 전달되었습니다'를 발생시킵니다.

이 방법으로 처리 할 수 ​​있습니다.

SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))

빈 문자열 인 경우 항상 결과를 반환하고 NULL을 반환합니다.


select left('TEST STRING', len('TEST STRING')-1)

당신의 coloumn이 text아닌 varchar경우 다음을 사용할 수 있습니다.

SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))

이 작업을 REVERSE-STUFF-REVERSE의 3 단계가 아닌 2 단계로 수행하려면 목록 구분 기호를 1 ~ 2 개의 공백으로 만들 수 있습니다. 그런 다음 RTRIM을 사용하여 후행 공백을 자르고 REPLACE를 사용하여 이중 공백을 ','

select REPLACE(RTRIM('a  b  c  d  '),'  ', ', ')

그러나 원래 문자열에 내부 공간이 포함될 수 있으면 이것은 좋지 않습니다.

성능이 확실하지 않습니다. 각 REVERSE는 문자열의 새 사본을 작성하지만 STUFF는 REPLACE보다 세 번째 빠릅니다.

또한 이것을보십시오


@result = substring(@result, 1, (LEN(@result)-1))

나는 이것을 -hack-;) 제안 할 수있다.

select 
    left(txt, abs(len(txt + ',') - 2))
from 
    t;

SQL Server 바이올린 데모


소스 텍스트 / var은 null이거나 비어있을 수 있습니다.

역 선택 (SUBSTRING (REVERSE (@a), 2, 9999))


당신은 기능을 만들 수 있습니다

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

마지막 캐릭터를 얻으십시오

Right(@string, len(@String) - (len(@String) - 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

I love @bill-hoenig 's answer; however, I was using a subquery and I got caught up because the REVERSE function needed two sets of parentheses. Took me a while to figure that one out!

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

To update the record by trimming the last N characters of a particular column:

UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause

Try It :

  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

output:

Tada
--------------------
TEST STRIN

Try this,

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

And the output will be like, 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)

참고URL : https://stackoverflow.com/questions/1256915/remove-the-last-character-in-a-string-in-t-sql

반응형