Respostas:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Editar: Para explicar, RIGHT leva 2 argumentos - a string (ou coluna) para operar e o número de caracteres a serem retornados (começando no lado "direito" da string). LEN retorna o comprimento dos dados da coluna e subtraímos quatro para que nossa função DIREITA deixe os 4 caracteres mais à esquerda "para trás".
Espero que isso faça sentido.
Edite novamente - Acabei de ler a resposta de Andrew, e ele pode muito bem ter interferido corretamente, e posso estar enganado. Se for esse o caso (e você deseja atualizar a tabela em vez de apenas retornar resultados medicados), faça o seguinte:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Ele está no caminho certo, mas sua solução manterá os 4 caracteres no início da sequência, em vez de descartar os 4 caracteres.
COL_LENGTH('MyTable', 'MyColumn')
vez de, LEN(MyColumn)
porque, no meu caso, queria excluir os primeiros n caracteres, independentemente do tamanho do conteúdo real da coluna, mas isso funcionou bem além disso!
Stuff(someColumn, 1, 4, '')
Isto diz que, começando com a 1
posição do primeiro caractere, substitua os 4
caracteres por nada''
someColumn
é algo complexo como uma subseleção de um CTE ou algo assim, isso não requer avaliação duas vezes.
Por que usar o LEN para ter duas funções de string? Tudo que você precisa é o personagem 5 ...
...SUBSTRING (Code1, 5, 8000)...
Tente o seguinte:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Aqui está uma maquete simples do que você está tentando fazer :)
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)
Portanto, use a última declaração no campo que você deseja cortar :)
A função SUBSTRING elimina o Código1, iniciando no quinto caractere e continuando pelo comprimento de CODE1 menos 4 (o número de caracteres ignorados no início).
Você também pode fazer isso no SQL ..
substring(StudentCode,4,len(StudentCode))
sintaxe
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
A resposta principal não é adequada quando os valores podem ter um comprimento menor que 4.
Você receberá "Parâmetro de comprimento inválido passado para a função correta" porque não aceita negativos. Use uma instrução CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
Valores menores que 4 fornecem o comportamento surpreendente abaixo, em vez de um erro, porque passar valores negativos para RIGHT apara os primeiros caracteres em vez de toda a cadeia. Faz mais sentido usar em seu RIGHT(MyColumn, -5)
lugar.
Um exemplo comparando o que você obtém ao usar o "comprimento - 5" da resposta principal em vez 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 a função interna de corte que é perfeita para o efeito.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
Seria bom compartilhar, para o uso do DB2:
INSERT(someColumn, 1, 4, '')
Stuff
não é suportado no DB2