답변:
예 :
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)