Ответы:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Редактировать: Для объяснения, RIGHT принимает 2 аргумента - строку (или столбец), с которой нужно работать, и количество возвращаемых символов (начиная с «правой» части строки). LEN возвращает длину данных столбца, и мы вычитаем четыре, так что наша функция RIGHT оставляет 4 крайних левых символа «позади».
Надеюсь, это имеет смысл.
Отредактируйте снова - я только что прочитал ответ Эндрю, и он вполне мог правильно интерпретировать, и я могу ошибаться. Если это так (и вы хотите ОБНОВИТЬ таблицу, а не просто возвращать поддающиеся проверке результаты), вы можете сделать это:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Он находится на правильном пути, но его решение будет сохранять 4 символа в начале строки, а не отбрасывать указанные 4 символа.
COL_LENGTH('MyTable', 'MyColumn')
вместо, LEN(MyColumn)
потому что в моем случае я хотел исключить первые n символов независимо от размера фактического содержимого в столбце, но это работало хорошо, кроме этого!
Stuff(someColumn, 1, 4, '')
Это говорит, начиная с первой 1
позиции символа, заменить 4
символы ничем''
someColumn
это что-то сложное, например, отбор из CTE или что-то в этом роде, это не требует его оценки дважды.
Зачем использовать LEN, чтобы у вас было 2 строковые функции? Все, что вам нужно, это персонаж 5 на ...
...SUBSTRING (Code1, 5, 8000)...
Попробуй это:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Вот простой макет того, что вы пытаетесь сделать :)
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)
Итак, используйте последнее утверждение для поля, которое вы хотите обрезать :)
Функция SUBSTRING отключает Code1, начиная с символа FIFTH и продолжая в течение длины CODE1 минус 4 (количество символов, пропущенных в начале).
Вы также можете сделать это в SQL ..
substring(StudentCode,4,len(StudentCode))
синтаксис
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
Верхний ответ не подходит, если значения могут иметь длину меньше 4.
Вы получите «Неверный параметр длины, переданный правильной функции», потому что он не принимает отрицательные значения. Используйте оператор CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
Значения меньше 4 дают удивительное поведение ниже вместо ошибки, потому что передача отрицательных значений в ПРАВО обрезает первые символы вместо всей строки. RIGHT(MyColumn, -5)
Вместо этого имеет больше смысла .
Пример сравнения того, что вы получаете, когда используете верхний ответ «длина - 5» вместо «-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
Есть встроенная функция обрезки, которая идеально подходит для этой цели.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
Было бы хорошо поделиться, для использования DB2:
INSERT(someColumn, 1, 4, '')
Stuff
не поддерживается в DB2