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 1posición del primer personaje, reemplace los 4caracteres con nada''
someColumnes 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