回答:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
編集:説明すると、RIGHTは2つの引数を取ります-操作する文字列(または列)と返す文字数(文字列の「右側」から開始)。LENは列データの長さを返し、4を減算して、RIGHT関数が左端の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からの副選択や何かのような複雑な場合、これを2回評価する必要はありません。
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関数は、5番目の文字から始まり、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」の代わりにトップアンサーの「length-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