답변:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
편집 : 설명하기 위해 RIGHT는 작동 할 문자열 (또는 열)과 반환 할 문자 수 (문자열의 "오른쪽"에서 시작)의 두 가지 인수를 취합니다. LEN은 열 데이터의 길이를 반환하고 RIGHT 함수는 가장 왼쪽에있는 4자를 "뒤에"남기도록 4를 뺍니다.
이것이 의미가 있기를 바랍니다.
다시 편집-나는 Andrew의 응답을 읽었으며 그는 제대로 이해했을 수 있습니다. 이 경우 (의사 결과를 반환하지 않고 테이블을 업데이트하려는 경우) 다음을 수행 할 수 있습니다.
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
그는 올바른 길을 가고 있지만 그의 해결책은 4 글자를 버리지 않고 문자열의 시작 부분에 4 글자를 유지 합니다.
COL_LENGTH('MyTable', 'MyColumn')
대신에 사용 했지만 결국은 LEN(MyColumn)
그렇지 않았습니다!
Stuff(someColumn, 1, 4, '')
첫 번째 1
문자 위치 부터 시작하여 4
문자를 아무것도 아닌 것으로 바꿉니다.''
someColumn
CTE의 하위 선택이나 소싱과 같은 복잡한 것이면 두 번 평가할 필요가 없습니다.
왜 LEN을 사용하여 2 개의 문자열 함수가 있습니까? 캐릭터 5 만 있으면됩니다 ...
...SUBSTRING (Code1, 5, 8000)...
다음은 수행하려는 작업의 간단한 모형입니다. :)
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 함수는 FIFTH 문자에서 시작하여 CODE1의 길이가 4 미만 (시작에서 건너 뛴 문자 수) 미만인 Code1을 잘라냅니다.
값의 길이가 4보다 작을 경우 상단 답변이 적합하지 않습니다.
음수를 허용하지 않기 때문에 "올바른 길이 매개 변수가 올바른 함수에 전달되었습니다"가 표시됩니다. CASE 문을 사용하십시오.
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
음수 값을 RIGHT에 전달하면 전체 문자열 대신 첫 번째 문자가 잘 리기 때문에 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