Odpowiedzi:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Edycja: Aby wyjaśnić, PRAWO przyjmuje 2 argumenty - ciąg (lub kolumnę), na którym ma działać, i liczbę znaków do zwrócenia (zaczynając od „prawej” strony ciągu). LEN zwraca długość danych kolumny, a my odejmujemy cztery, tak aby funkcja PRAWO pozostawiła cztery skrajne lewe znaki „za”.
Mam nadzieję, że to ma sens.
Edytuj ponownie - właśnie przeczytałem odpowiedź Andrew i mógł on zinterpretować poprawnie, i mogę się mylić. W takim przypadku (i chcesz ZAKTUALIZOWAĆ tabelę, a nie tylko zwracać spreparowane wyniki), możesz to zrobić:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Jest na dobrej drodze, ale jego rozwiązanie zachowa 4 znaki na początku ciągu, zamiast odrzucać wspomniane 4 znaki.
COL_LENGTH('MyTable', 'MyColumn')
zamiast tego LEN(MyColumn)
użyłem, ponieważ w moim przypadku chciałem wykluczyć pierwsze n znaków bez względu na rozmiar rzeczywistej zawartości w kolumnie, ale to działało dobrze poza tym!
Stuff(someColumn, 1, 4, '')
To mówi, zaczynając od pozycji pierwszego 1
znaku, zamień 4
znaki na nic''
someColumn
jest to coś złożonego, jak podselekcja z CTE lub coś innego, nie wymaga to podwójnej oceny.
Po co używać LEN, aby mieć 2 funkcje tekstowe? Potrzebujesz tylko postaci 5 na ...
...SUBSTRING (Code1, 5, 8000)...
Spróbuj tego:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Oto prosta makieta tego, co próbujesz zrobić :)
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)
Więc użyj ostatniej instrukcji w polu, które chcesz przyciąć :)
Funkcja SUBSTRING przycina w dół Code1, zaczynając od piątego znaku i kontynuując przez długość CODE1 minus 4 (liczba znaków pomijanych na początku).
Możesz to również zrobić w SQL ..
substring(StudentCode,4,len(StudentCode))
składnia
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
Górna odpowiedź nie jest odpowiednia, gdy wartości mogą mieć długość mniejszą niż 4.
Otrzymasz komunikat „Nieprawidłowy parametr długości przekazany do właściwej funkcji”, ponieważ nie akceptuje ona wartości ujemnych. Użyj instrukcji CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
Wartości mniejsze niż 4 dają zaskakujące zachowanie poniżej zamiast błędu, ponieważ przekazanie wartości ujemnych do PRAWEGO pola przycina pierwsze znaki zamiast całego ciągu. RIGHT(MyColumn, -5)
Zamiast tego lepiej jest użyć .
Przykład porównujący to, co otrzymujesz, stosując górną odpowiedź „długość - 5” zamiast „-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
Jest wbudowana funkcja przycinania, która jest idealna do tego celu.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
Byłoby dobrze udostępnić, Do użytku z DB2:
INSERT(someColumn, 1, 4, '')
Stuff
nie jest obsługiwany w DB2