답변:
예 :
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 ... 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'))
습니까?
이 작업을 REVERSE-STUFF-REVERSE의 3 단계가 아닌 2 단계로 수행하려면 목록 구분 기호를 1 ~ 2 개의 공백으로 만들 수 있습니다. 그런 다음 RTRIM을 사용하여 후행 공백을 자르고 REPLACE를 사용하여 이중 공백을 ','
select REPLACE(RTRIM('a b c d '),' ', ', ')
그러나 원래 문자열에 내부 공간이 포함될 수 있으면 이것은 좋지 않습니다.
성능이 확실하지 않습니다. 각 REVERSE는 문자열의 새 사본을 작성하지만 STUFF는 REPLACE보다 세 번째 빠릅니다.
또한 이것을보십시오
이 시도
DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'
SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
내 대답은 허용되는 대답과 비슷하지만 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 @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)