web-dev-qa-db-ja.com

テーブル内の特定の列の最初の文字を削除する方法

SQLでは、テーブル内の特定の列の値の最初の4文字を削除する方法を教えてください。列名はStudent Codeで、値の例はABCD123Stu1231です。すべてのレコードについて自分のテーブルから最初の4文字を削除したい

案内してください

135
Shyju
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn

編集:説明すると、RIGHTは2つの引数を取ります - 操作する文字列(または列)、および返す文字数(文字列の「右側」から始まります)です。 LENは列データの長さを返し、RIGHT関数が左端の4文字を "後ろ"に残すように4を引きます。

これが理にかなっていることを願っています。

もう一度編集してください - 私はAndrewの回答を読みましたが、彼はきちんと正しく相互作用していたのでしょう、そして私は間違っているかもしれません。これが事実であるならば(そしてあなたは単に博士結果を返すのではなくテーブルを更新したい)、これを行うことができます:

UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)

彼は正しい軌道に乗っています、しかし彼の解決策はキープ前述の4文字を捨てるのではなく、文字列の先頭に4文字を置きます。

217
Aaron Alton
Stuff(someColumn, 1, 4, '')

これは、最初の1文字位置から始めて、4文字を何もないものに置き換えます''

75
AaronLS

2つの文字列関数があるのにLENを使うのはなぜですか?あなたが必要とするすべては上の文字5です...

...SUBSTRING (Code1, 5, 8000)...
28
gbn

これを試して:

update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
12
Andrew Hare

これはあなたがやろうとしていることの簡単なモックアップです:)

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を切り捨てます。

6
Rob

完全なもの

DECLARE @v varchar(10)

SET @v='#temp'

select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'
4
Higarian

これを試して。 100%作業

UPDATE Table_Name
SET RIGHT(column_name, LEN(column_name) - 1)

2
user8613096

目的に最適な組み込みのトリム機能があります。

SELECT trim(both 'ag' from 'asdfg');
btrim 
-------
 sdf
(1 riga)

http://www.postgresql.org/docs/8.1/static/functions-string.html

1
linuxatico

共有するのが良いでしょう、DB2用:INSERT(someColumn, 1, 4, '')

StuffはDB2ではサポートされていません

1
Superb Saif

SQLでもこれを行うことができます。

substring(StudentCode,4,len(StudentCode))

構文

substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
1
Durgesh Pandey

RIGHTに負の値を渡すと、文字列全体ではなく最初の文字が切り取られるため、文字列の長さが予想より短い場合、一番上の答えは驚くべき動作をします。代わりにRIGHT(MyColumn, -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                           
0
Noumenon

#のような特殊文字が前にある最初の数文字を削除しなければならないなら、これは良いものです:

UPDATE tblInvalidID
SET [ColumnName] =stuff(ColumnName, 1, charindex('#', ColumnName), ' ') 
0
Prachita