Відповіді:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Редагувати: Щоб пояснити, ПРАВО приймає 2 аргументи - рядок (або стовпець), на який потрібно працювати, і кількість символів, які потрібно повернути (починаючи з "правої" частини рядка). LEN повертає довжину даних стовпців, і ми віднімаємо чотири, щоб наша функція ВПРАВО залишала крайні ліві 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 або somehting, для цього не потрібно його оцінювати двічі.
Навіщо використовувати 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