¿Cómo elimino el último carácter de una cadena en T-SQL
?¿Eliminar el último carácter de una cadena en T-SQL?
Por ejemplo:
'TEST STRING'
para volver:
'TEST STRIN'
¿Cómo elimino el último carácter de una cadena en T-SQL
?¿Eliminar el último carácter de una cadena en T-SQL?
Por ejemplo:
'TEST STRING'
para volver:
'TEST STRIN'
por ejemplo
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
Prueba esto:
select substring('test string', 1, (len('test string') - 1))
@Adrien ¿Alguna idea de por qué esto parece dar el mismo resultado que 'seleccionar subcadena ('cadena de prueba', 0, len ('cadena de prueba'))'? – Louis
Si por alguna razón la lógica de la columna es complejo (caso cuando ... entonces ... otra cosa ... final), entonces las soluciones anteriores que provoca a tiene que repetir la misma lógica en la función len(). Duplicar la misma lógica se convierte en un desastre. Si este es el caso, esta es una solución que vale la pena señalar. Este ejemplo elimina la última coma no deseada. Finalmente encontré un uso para la función REVERSE.
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
Tenga en cuenta que este código devuelve 'NULL' si pasa una cadena que es más corta que el intervalo de eliminación especificado para' STUFF'. Envuélvalo en un 'ISNULL' para obtener un valor de salida diferente para el caso de cadena vacía. – Rozwel
Agradable, usando esto con una aplicación externa, con una ruta xml ('') para eliminar una coma al final. awseome – Tracker1
También de la misma manera que @ Tracker1. A diferencia de cualquier cosa que involucre a LEN(), esto funciona con gracia (sin repetir nada) para cadenas vacías (especialmente envueltas en ISNULL()) – gregmac
Si la cadena está vacía,
DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)
entonces este código hará que el mensaje de error "parámetro de longitud no válida pasado a la función subcadena.
se puede manejar de esta manera:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
Siempre volverá resultado, y NULL en caso de cadena vacía.
Si su text
de Coloumn es y no varchar
, entonces usted puede utilizar esto:
SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
Me encanta @ respuesta factura-Hoenig 's; sin embargo, estaba usando una subconsulta y me quedé atrapado porque la función REVERSE necesitaba dos conjuntos de paréntesis. Me tomó un tiempo descubrirlo.
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
Es posible que desee utilizar una aplicación externa/cruzada para la parte compuesta de la consulta. Estoy usando esto para obtener un conjunto de banderas para un elemento principal. – Tracker1
Si usted quiere hacer esto en dos pasos, en lugar de los tres INVERSA MATERIA inversa, usted puede tener su lista separador sea uno o dos espacios. A continuación, utilice RTRIM para recortar los espacios finales, y reemplazar para sustituir los espacios dobles con ''
select REPLACE(RTRIM('a b c d '),' ', ', ')
Sin embargo, esto no es una buena idea si su cadena original puede contener espacios internos.
No estoy seguro del rendimiento. Cada REVERSE crea una nueva copia de la cadena, pero STUFF es un tercio más rápido que REPLACE.
también ver this
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+','[email protected]
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)
Creo que las respuestas existentes ya cubren este método. – Sam
puede crear la función
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
Mi respuesta es similar a la respuesta aceptada, pero también comprueba si hay cadenas nulas y vacías.
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
para actualizar el registro por el recorte de los últimos N caracteres de una columna en particular:
UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName)-N) where clause
Inténtelo:
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
de salida:
Tada
--------------------
TEST STRIN
select left('TEST STRING', len('TEST STRING')-1)
Prueba este
DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'
SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
probar esto,
DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames
Y la salida será como, THAMIZHMANI
@result = substring(@result, 1, (LEN(@result)-1))
puedo sugerir este -hack-;).
select
left(txt, abs(len(txt + ',') - 2))
from
t;
alternativa: selecciona la izquierda (YourColumnName, LEN (YourColumnName) - 1) DE YourTable –
Nota: esto genera un error si la cadena está vacía. – gregmac
Gracias por la captura nula - ISNULL (LEFT (@String, LEN (@String) - 1), 'ErrMsg') resolverá – Volvox