Respuestas:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Editar: Para explicar, DERECHA toma 2 argumentos: la cadena (o columna) para operar, y el número de caracteres para devolver (comenzando 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 los 4 caracteres más a la izquierda "detrás".
Espero que esto tenga sentido.
Edite de nuevo: acabo de leer la respuesta de Andrew, y es muy posible que haya interpretado correctamente, y podría estar equivocado. Si este es el caso (y desea ACTUALIZAR la tabla en lugar de simplemente devolver resultados alterados), puede hacer esto:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Está en el camino correcto, pero su solución mantendrá los 4 caracteres al comienzo de la cadena, en lugar de descartar dichos 4 caracteres.
COL_LENGTH('MyTable', 'MyColumn')
lugar de LEN(MyColumn)
porque en mi caso quería excluir los primeros n caracteres sin importar el tamaño del contenido real dentro de la columna, ¡pero esto funcionó bien aparte de eso!
Stuff(someColumn, 1, 4, '')
Esto dice, comenzando con la 1
posición del primer personaje, reemplace los 4
caracteres con nada''
someColumn
es algo complejo como una subselección de un CTE o algo, esto no requiere evaluarlo dos veces.
¿Por qué usar LEN para tener 2 funciones de cadena? Todo lo que necesitas es el personaje 5 en ...
...SUBSTRING (Code1, 5, 8000)...
Prueba esto:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Aquí hay una simple maqueta de lo que estás 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)
Por lo tanto, use la última instrucción contra el campo que desea recortar :)
La función SUBSTRING recorta Code1, comenzando en el QUINTO carácter y continuando durante la longitud de CODE1 menos 4 (el número de caracteres omitidos al inicio).
También puede hacer esto en SQL.
substring(StudentCode,4,len(StudentCode))
sintaxis
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
La respuesta principal no es adecuada cuando los valores pueden tener una longitud inferior a 4.
Obtendrá "Parámetro de longitud no válido pasado a la función correcta" porque no acepta negativos. Use una declaración CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
Los valores inferiores a 4 dan el comportamiento sorprendente a continuación en lugar de un error, porque pasar valores negativos a DERECHA recorta los primeros caracteres en lugar de la cadena completa. Tiene más sentido usar RIGHT(MyColumn, -5)
en su lugar.
Un ejemplo que compara lo que obtienes cuando usas la "longitud - 5" de la respuesta superior en lugar de "-5":
create temp table foo (foo) as values ('123456789'),('12345678'),('1234567'),('123456'),('12345'),('1234'),('123'),('12'),('1'), ('');
select foo, right(foo, length(foo) - 5), right(foo, -5) from foo;
foo len(foo) - 5 just -5
--------- ------------ -------
123456789 6789 6789
12345678 678 678
1234567 67 67
123456 6 6
12345
1234 234
123 3
12
1
Existe la función de recorte incorporada que es perfecta para este propósito.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
Sería bueno compartir, para el uso de DB2:
INSERT(someColumn, 1, 4, '')
Stuff
no está soportado en DB2