Risposte:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Modifica: per spiegare, DESTRA accetta 2 argomenti: la stringa (o colonna) su cui operare e il numero di caratteri da restituire (a partire dal lato "destro" della stringa). LEN restituisce la lunghezza dei dati della colonna e ne sottraggiamo quattro in modo che la nostra funzione DESTRA lasci "indietro" i 4 caratteri più a sinistra.
Spero che abbia senso.
Modifica di nuovo - Ho appena letto la risposta di Andrew, e potrebbe benissimo aver interpretato correttamente, e potrei sbagliarmi. Se questo è il caso (e si desidera AGGIORNARE la tabella anziché restituire solo risultati con documentazione), è possibile farlo:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
È sulla buona strada, ma la sua soluzione manterrà i 4 caratteri all'inizio della stringa, anziché scartare i 4 caratteri.
COL_LENGTH('MyTable', 'MyColumn')
invece di LEN(MyColumn)
perché nel mio caso volevo escludere i primi n caratteri, indipendentemente dalla dimensione del contenuto effettivo all'interno della colonna, ma questo ha funzionato bene a parte quello!
Stuff(someColumn, 1, 4, '')
Questo dice, a partire dalla prima 1
posizione del personaggio, sostituire i 4
personaggi con niente''
someColumn
è qualcosa di complesso come una sottoselezione da un CTE o qualcosa di simile, ciò non richiede di valutarlo due volte.
Perché usare LEN in modo da avere 2 funzioni di stringa? Tutto ciò che serve è il personaggio 5 su ...
...SUBSTRING (Code1, 5, 8000)...
Prova questo:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Ecco un semplice modello di ciò che stai cercando di fare :)
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)
Quindi, usa l'ultima istruzione contro il campo che vuoi tagliare :)
La funzione SUBSTRING abbassa Code1, iniziando dal FIFTH e proseguendo per la lunghezza di CODE1 meno 4 (il numero di caratteri saltato all'inizio).
Puoi farlo anche in SQL ..
substring(StudentCode,4,len(StudentCode))
sintassi
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
La risposta migliore non è adatta quando i valori possono avere una lunghezza inferiore a 4.
Otterrai "Parametro di lunghezza non valido passato alla funzione corretta" perché non accetta i negativi. Utilizzare un'istruzione CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
I valori inferiori a 4 danno il comportamento sorprendente di seguito invece di un errore, poiché il passaggio di valori negativi a DESTRA taglia i primi caratteri anziché l'intera stringa. RIGHT(MyColumn, -5)
Invece ha più senso usare .
Un esempio che confronta ciò che ottieni quando usi la "lunghezza - 5" della risposta superiore anziché "-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
C'è la funzione di trim integrata che è perfetta per lo scopo.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
Sarebbe bene condividere, per DB2 usare:
INSERT(someColumn, 1, 4, '')
Stuff
non è supportato in DB2