Supprimer le dernier caractère d'une chaîne en T-SQL?
19 réponses
p.ex.
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
si, pour une raison quelconque, la logique de votre colonne est complexe (cas où ... puis. .. autre. .. fin), puis les solutions ci-dessus vous obligent à répéter la même logique dans la fonction len (). Dupliquer la même logique devient un gâchis. Si c'est le cas, alors c'est une solution qui mérite d'être souligné. Cet exemple se débarrasse de la dernière virgule non désirée. J'ai finalement trouvé une utilisation pour la fonction inverse.
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
essayez ceci:
select substring('test string', 1, (len('test string') - 1))
si votre chaîne est vide,
DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)
alors ce code causera un message D'erreur 'paramètre de longueur invalide passé à la fonction de soustraction.
, Vous pouvez gérer de cette façon:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
il retournera toujours le résultat, et NULL en cas de chaîne vide.
si votre coloumn est text
et non varchar
, alors vous pouvez utiliser ceci:
SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
si vous voulez faire cela en deux étapes, plutôt que les trois de REVERSE-STUFF-REVERSE, vous pouvez avoir votre séparateur de Liste être un ou deux espaces. Ensuite, utilisez RTRIM pour couper les espaces de fuite et remplacez les doubles espaces par ','
select REPLACE(RTRIM('a b c d '),' ', ', ')
cependant, ce n'est pas une bonne idée si votre chaîne originale peut contenir des espaces internes.
pas sûr de la performance. Chaque revers crée une nouvelle copie de la chaîne, mais la substance est une troisième plus rapide que le remplacement.
voir aussi ce
je peux suggérer ceci-hack- ;).
select
left(txt, abs(len(txt + ',') - 2))
from
t;
vous pouvez créer une fonction
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
Obtenir le dernier caractère Droit(@ficelle, len(@String) - (len(@String) - 1))
ma réponse est similaire à la réponse acceptée, mais elle vérifie aussi la chaîne nulle et vide.
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
Essayez cette
DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'
SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
j'adore la réponse de @bill-hoenig; cependant, j'utilisais une sous-requête et j'ai été rattrapé parce que la fonction inverse avait besoin de deux séries de parenthèses. M'a fallu un certain temps pour comprendre que l'on sort!
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
pour mettre à jour le document en taillant les N derniers caractères d'une colonne particulière:
UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause
L'Essayer :
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
sortie:
Tada
--------------------
TEST STRIN
Essayez cette,
DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames
et la sortie sera comme, 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)