2009-06-11 66 views

Respuesta

148
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn 

Editar: de explicar, DERECHA tiene 2 argumentos - la cadena (o columna) para operar en, y la cantidad de caracteres a devolver (empezando en el lado "derecho" de la cadena). LEN devuelve la longitud de los datos de la columna, y restamos cuatro para que nuestra función DERECHA deje a los 4 caracteres más a la izquierda "detrás".

Espero que esto tenga sentido.

Editar de nuevo - Acabo de leer la respuesta de Andrew, y es muy posible que haya interpelado correctamente, y podría estar equivocado. Si este es el caso (y que desea actualizar la tabla en lugar de sólo devuelve resultados adulterados), usted puede hacer esto:

UPDATE MyTable 
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4) 

Está en el camino correcto, pero su solución mantener los 4 caracteres en el inicio de la cadena, en lugar de descartar dichos 4 caracteres.

+5

esta fallará para valores con <4 caracteres. Debe agregar un bloque de casos para devolver el valor de la columna para <4. –

+1

@Scott: Verdadero. SUBSTRING deals <4: simplemente devuelve cadena de longitud cero ... – gbn

+2

Probablemente la mejor manera de manejarlo sería simplemente: ACTUALIZACIÓN MyTableSET MyColumn = RIGHT (MyColumn, LEN (MyColumn) - 4) WHERE LEN (MyColumn)> 4 El SUBSTRING no generará errores, pero también "actualizará" innecesariamente filas con menos de cuatro caracteres. Dicho esto, el OP indicó que querían recortar los primeros 4 caracteres de una columna específica, supongo que a menos que se proporcione con mayor detalle que TODAS las filas deben ser recortadas. –

9

Prueba esto:

update table YourTable 
set YourField = substring(YourField, 5, len(YourField)-3); 
5

Aquí es un simple maqueta de lo que estamos tratando de hacer :)

CREATE TABLE Codes 
(
code1 varchar(10), 
code2 varchar(10) 
) 

INSERT INTO Codes (CODE1, CODE2) vALUES ('ABCD1234','') 


UPDATE Codes 
SET code2 = SUBSTRING(Code1, 5, LEN(CODE1) -4) 

lo tanto, utilizar la última declaración contra el campo que desea recortar :)

La función SUBSTRING recorta Código1, comenzando en el QUINTO carácter, y continuando por la longitud de CÓDIGO1 menos 4 (el número de caracteres omitidos al inicio).

22

¿Por qué usar LEN para que tenga 2 funciones de cadena? Todo lo que necesita es de carácter 5 de ...

...SUBSTRING (Code1, 5, 8000)... 
56
Stuff(someColumn, 1, 4, '') 

Esto dice, empezando por la primera posición 1 carácter, reemplazar 4 personajes sin nada ''

+5

Pregunta anterior que sé, pero prefiero esta solución, ya que no usa más de una función o tiene un gran número aleatorio. –

+2

Aún más: si 'someColumn' es algo complejo como una subselección de un CTE o somehting, esto no requiere una evaluación dos veces. – Jeff

+0

FYI, esta solución también funciona muy bien para recortar valores numéricos. –

3

Lo completa

DECLARE @v varchar(10) 

SET @v='#temp' 

select STUFF(@v, 1, 1, '') 
WHERE LEFT(@v,1)='#' 
1

También puede hacerlo en SQL ...

substring(StudentCode,4,len(StudentCode)) 

sintaxis

substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>) 
0

Si usted tiene que quitar los primeros caracteres que están precedidos por un carácter especial como #, esta es una buena:

UPDATE tblInvalidID 
SET [ColumnName] =stuff(ColumnName, 1, charindex('#', ColumnName), ' ') 
1

que sería bueno para compartir Para uso de DB2: INSERT(someColumn, 1, 4, '')

Stuff no es compatible con DB2

+0

Gracias! No a menudo estos foros tienen soluciones de DB2 –

1

Pruebe esto. 100% de trabajo

UPDATE Table_Name 
SET RIGHT(column_name, LEN(column_name) - 1) 

   

Cuestiones relacionadas