2008-08-20 11 views
9

私は 'ファイル名'列を持つテーブルを持っています。 最近、この列に挿入しましたが、入力したすべてのファイル名にファイル拡張子を追加するのを忘れました。幸いにもそれらはすべて「.jpg」画像です。T-SQL/MS-SQLを使用して既存のテーブルセルに文字列を追加する最も簡単な方法は何ですか?

「.jpg」拡張子を含めるには、これらの挿入されたフィールドの「ファイル名」列を簡単に更新できますか(既知のID値に基づいて最近の行を選択できると仮定して)

答えて

25

溶液である:それはVARCHAR(20)列とファイル名であればそうでない場合はその全体が[ファイル名]の列、すなわち文字列の連結のために選択されるので、RTRIMが必要とされる

UPDATE tablename SET [filename] = RTRIM([filename]) + '.jpg' WHERE id > 50 

はわずか10であります長い文字列を選択すると、それらの10文字を選択してから10文字を選択します。これは、20文字の長さのフィールドに20 + 3文字を収めようとすると、エラーになります。

+0

ありがとう、非常に有用 –

+1

*** *** var ** char *値には、式のスペースや固定長の* char *フィールドだけが含まれますか? –

+0

私は確かに分かりません - 私が扱っていたフィールドは** var ** char(50)でした。それはvarcharのアイデアに対して私が同意するような間隔を含んでいました。おそらく、なぜvarcharが選択されたときにスペースが含まれていたかについて、誰かが私たちに啓発することができますか? –

2

すごく簡単だと思います。

update MyTable 
set filename = filename + '.jpg' 
where ... 

編集:Ooh +1〜@ MattMitchellのrtrim提案に対する回答。

5

カラムがCHAR(20)の場合は正解ですが、VARCHAR(20)でスペースが明示的に入力されていない場合はtrueです。

RTRIM機能を持たないCHARフィールドで試してみると、"文字列またはバイナリデータが切り捨てられる"エラーが発生します。

+0

私は確かに分かりません - 私が扱っていたフィールドは** var ** char(50)でした。それはvarcharのアイデアに対して私が同意するような間隔を含んでいました。おそらく、なぜvarcharが選択されたときにスペースが含まれていたかについて、誰かが私たちに啓発することができますか? –

1

オリジナルのデータが(このテーブルに挿入される前に)charカラムまたは変数から来た場合、元のデータにはvarcharになる前にスペースが追加されていました。

DECLARE @Name char(10), @Name2 varchar(10) 
SELECT 
    @Name = 'Bob', 
    @Name2 = 'Bob' 

SELECT 
    CASE WHEN @Name2 = @Name THEN 1 ELSE 0 END as Equal, 
    CASE WHEN @Name2 like @Name THEN 1 ELSE 0 END as Similiar 

ライフレッスン:決してcharを使用しないでください。

+0

AH! SQLインポートツールを使用したExcelインポートでした –

1

末尾のスペースの謎に対する答えは、より多くの情報をご覧くださいANSI_PADDING

で見つけることができます:SET ANSI_PADDING (Transact-SQL)

デフォルトはANSI_PADDIN ONです。これは、列が作成されたときにのみ影響を与えますが、既存の列には影響しません。

更新クエリを実行する前に、データを確認してください。それは危険にさらされた可能性があります。

妥協の行を見つけるために、次のクエリを実行します。

SELECT * 
FROM tablename 
WHERE LEN(RTRIM([filename])) > 46 
-- The column size varchar(50) minus 4 chars 
-- for the needed file extension '.jpg' is 46. 

これらの行のいずれかのいくつかの文字を紛失したり、ファイルの拡張子を追加するための十分なスペースがないています。

+0

参考になりました –

1

私はDavid Bの "Life Lesson"を調整したかったのです。私はそれは "可変長文字列の値のcharを使用しないでください"と思う - > charデータ型の有効な用途は、いくつかの人々と思うほど多くはありません:)

関連する問題