Antworten:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Bearbeiten: Zur Erklärung benötigt RIGHT zwei Argumente - die Zeichenfolge (oder Spalte), mit der gearbeitet werden soll, und die Anzahl der zurückzugebenden Zeichen (beginnend an der "rechten" Seite der Zeichenfolge). LEN gibt die Länge der Spaltendaten zurück und wir subtrahieren vier, so dass unsere RIGHT-Funktion die 4 Zeichen ganz links "zurücklässt".
Hoffe das macht Sinn.
Nochmals bearbeiten - Ich habe gerade Andrews Antwort gelesen, und er hat sich möglicherweise richtig verhalten, und ich könnte mich irren. Wenn dies der Fall ist (und Sie die Tabelle AKTUALISIEREN möchten, anstatt nur behandelte Ergebnisse zurückzugeben), können Sie Folgendes tun:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Er ist auf dem richtigen Weg, aber seine Lösung behält die 4 Zeichen am Anfang der Zeichenfolge bei, anstatt die 4 Zeichen zu verwerfen.
COL_LENGTH('MyTable', 'MyColumn')
statt verwendet, LEN(MyColumn)
weil ich in meinem Fall die ersten n Zeichen ausschließen wollte, unabhängig von der Größe des tatsächlichen Inhalts in der Spalte, aber das hat ansonsten gut funktioniert!
Stuff(someColumn, 1, 4, '')
Dies besagt, beginnend mit der ersten 1
Zeichenposition, ersetzen Sie 4
Zeichen durch nichts''
someColumn
es sich um etwas Komplexes wie eine Unterauswahl aus einem CTE oder etwas anderem handelt, muss es nicht zweimal ausgewertet werden.
Warum LEN verwenden, damit Sie 2 Zeichenfolgenfunktionen haben? Alles was du brauchst ist Charakter 5 auf ...
...SUBSTRING (Code1, 5, 8000)...
Versuche dies:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Hier ist ein einfaches Modell dessen, was du versuchst :)
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)
Verwenden Sie also die letzte Anweisung für das Feld, das Sie trimmen möchten :)
Die SUBSTRING-Funktion schneidet Code1 ab dem fünften Zeichen ab und setzt sich für die Länge von CODE1 abzüglich 4 fort (die Anzahl der beim Start übersprungenen Zeichen).
Sie können dies auch in SQL tun.
substring(StudentCode,4,len(StudentCode))
Syntax
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
Die Top-Antwort ist nicht geeignet, wenn Werte eine Länge von weniger als 4 haben können.
Sie erhalten "Ungültiger Längenparameter an die richtige Funktion übergeben", da keine Negative akzeptiert werden. Verwenden Sie eine CASE-Anweisung:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
Werte unter 4 ergeben anstelle eines Fehlers das unten stehende überraschende Verhalten, da beim Übergeben negativer Werte an RIGHT die ersten Zeichen anstelle der gesamten Zeichenfolge abgeschnitten werden. Es ist sinnvoller, RIGHT(MyColumn, -5)
stattdessen zu verwenden .
Ein Beispiel für den Vergleich dessen, was Sie erhalten, wenn Sie die "Länge - 5" der obersten Antwort anstelle von "-5" verwenden:
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
Es gibt die eingebaute Trimmfunktion, die perfekt für diesen Zweck ist.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
Es wäre gut zu teilen, Für DB2 verwenden:
INSERT(someColumn, 1, 4, '')
Stuff
wird in DB2 nicht unterstützt