복붙노트

[SQL] T-SQL에서 문자열의 마지막 문자를 제거?

SQL

T-SQL에서 문자열의 마지막 문자를 제거?

어떻게 T-SQL 문자열의 마지막 문자를 제거하는 방법은 무엇입니까?

예를 들면 :

'TEST STRING'

돌려 주다:

'TEST STRIN'

해결법

  1. ==============================

    1.EG

    EG

    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
    
  2. ==============================

    2.다음, 위의 방법을 사용하면 렌 () 함수에서 같은 논리를 반복해야됩니다 어떤 이유로 경우 열 로직 (다음 ... 다른 ... 끝이 때 ... 경우) 복잡하다. 같은 논리를 복제하는 것은 엉망이된다. 이 경우 다음이 지적 솔루션의 가치입니다. 이 예제는 마지막으로 불필요한 쉼표를 제거한다. 드디어 REVERSE 함수에 대한 사용을 발견했다.

    다음, 위의 방법을 사용하면 렌 () 함수에서 같은 논리를 반복해야됩니다 어떤 이유로 경우 열 로직 (다음 ... 다른 ... 끝이 때 ... 경우) 복잡하다. 같은 논리를 복제하는 것은 엉망이된다. 이 경우 다음이 지적 솔루션의 가치입니다. 이 예제는 마지막으로 불필요한 쉼표를 제거한다. 드디어 REVERSE 함수에 대한 사용을 발견했다.

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

    3.이 시도:

    이 시도:

    select substring('test string', 1, (len('test string') - 1))
    
  4. ==============================

    4.당신의 문자열이 비어있는 경우,

    당신의 문자열이 비어있는 경우,

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

    다음이 코드는 오류 메시지 '잘못된 길이 매개 변수는 문자열 함수에 전달.'원인이됩니다

    당신은 이런 식으로 처리 할 수 ​​있습니다 :

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

    항상 빈 문자열의 경우 결과를 반환하고, NULL 것입니다.

  5. ==============================

    5.

    select left('TEST STRING', len('TEST STRING')-1)
    
  6. ==============================

    6.원본 텍스트 / VAR는 null 또는 비어있을 수 있습니다 :

    원본 텍스트 / VAR는 null 또는 비어있을 수 있습니다 :

    SELECT REVERSE (SUBSTRING (REVERSE (@a), 2, 9999))

  7. ==============================

    7.당신의 열이 텍스트가 아닌 VARCHAR 경우, 당신은이를 사용할 수 있습니다 :

    당신의 열이 텍스트가 아닌 VARCHAR 경우, 당신은이를 사용할 수 있습니다 :

    SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
    
  8. ==============================

    8.오히려 역 다도-REVERSE의 세보다 두 단계에서이 작업을 수행하려면, 당신은 당신의 목록 구분 하나 개 또는 두 개의 공간이 될 수 있습니다. 그런 다음에 이중 공백을 대체 할 후행 공백을 트리밍하고 교체하려면 RTRIM을 사용 ','

    오히려 역 다도-REVERSE의 세보다 두 단계에서이 작업을 수행하려면, 당신은 당신의 목록 구분 하나 개 또는 두 개의 공간이 될 수 있습니다. 그런 다음에 이중 공백을 대체 할 후행 공백을 트리밍하고 교체하려면 RTRIM을 사용 ','

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

    그러나, 이것은 원래의 문자열 내부 공간을 포함 할 경우 좋은 생각이 아니다.

    성능에 대한 확실하지. 각 REVERSE는 문자열의 새 복사본을 만들지 만 STUFF 세 번째 빠른 교체보다.

    이 참조

  9. ==============================

    9.

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

    10.나는이 -hack-을 제안 할 수 있습니다).

    나는이 -hack-을 제안 할 수 있습니다).

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

    SQL 서버 바이올린 데모

  11. ==============================

    11.당신은 함수를 만들 수 있습니다

    당신은 함수를 만들 수 있습니다

    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
    
  12. ==============================

    12.이 시도

    이 시도

    DECLARE @String VARCHAR(100)
    SET @String = 'TEST STRING'
    SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
    
  13. ==============================

    13.마지막 문자를 가져옵니다

    마지막 문자를 가져옵니다

    Right(@string, len(@String) - (len(@String) - 1))
    
  14. ==============================

    14.내 대답은 허용 대답과 비슷하지만 널 확인하고 문자열을 비 웁니다.

    내 대답은 허용 대답과 비슷하지만 널 확인하고 문자열을 비 웁니다.

    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
    
  15. ==============================

    15.이것은 아주 늦게, 그러나 흥미롭게도 아직 언급하지 않았다.

    이것은 아주 늦게, 그러나 흥미롭게도 아직 언급하지 않았다.

    select stuff(x,len(x),1,'')
    

    즉 :

    take a string x
    go to its last character
    remove one character
    add nothing
    
  16. ==============================

    16.나는 청구 hoenig의 대답 @ 사랑; 그러나, 나는 서브 쿼리를 사용하고 REVERSE 함수는 괄호의 두 세트를 필요로했기 때문에 나는 잡혔다. 그림 하나 개 밖에 걸 렸어요!

    나는 청구 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
    
  17. ==============================

    17.특정 컬럼의 마지막 N 문자를 트리밍하여 레코드를 업데이트하려면 :

    특정 컬럼의 마지막 N 문자를 트리밍하여 레코드를 업데이트하려면 :

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

    18.시도 해봐 :

    시도 해봐 :

      DECLARE @String NVARCHAR(100)
        SET @String = '12354851'
        SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
    
  19. ==============================

    19.

    declare @string varchar(20)= 'TEST STRING'
    Select left(@string, len(@string)-1) as Tada
    

    산출:

    Tada
    --------------------
    TEST STRIN
    
  20. ==============================

    20.이 시도,

    이 시도,

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

    그리고 출력은 THAMIZHMANI처럼 될 것입니다

  21. ==============================

    21.

    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)
    
  22. from https://stackoverflow.com/questions/1256915/remove-the-last-character-in-a-string-in-t-sql by cc-by-sa and MIT license