Mi a legegyszerűbb módja a T-SQL / MS-SQL hozzáfűzni egy string meglévő táblázatcellákhoz?

szavazat
9

Van egy táblázat „fájlnév” oszlopban. Nemrég végeztek egy betétet ebbe az oszlopba, de az én sietve elfelejtette hozzáfűzni a fájl kiterjesztését az összes fájlnevek belépett. Szerencsére ezek mind .jpg képeket.

Hogyan tudom egyszerűen frissítheti a „fájlnév” oszlopban ezeket beszúrt mezők (feltételezve, hogy tudom választani a közelmúltban sorok alapján ismert id értékek), hogy tartalmazza a „.jpg” kiterjesztés?

A kérdést 20/08/2008 07:52
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
25

A megoldás:

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

RTrim van szükség, mert különben a [fájlnév] oszlop teljes egészében ki lehet választani az szövegösszefűzés azaz ha egy varchar (20) oszlop és a fájlnév csak 10 betű hosszú akkor is ki azokat a 10 betű, majd 10 tereket. Ez pedig hiba keletkezik, mint megpróbál, hogy illeszkedjen a 20 + 3 karakter egy 20 karakter hosszú mező.

Válaszolt 20/08/2008 07:54
a forrás felhasználó

szavazat
2

Szép könnyű azt hiszem.

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

Edit: Ooh +1 @ MattMitchell válasza a RTrim javaslatot.

Válaszolt 20/08/2008 07:55
a forrás felhasználó

szavazat
5

MattMitchell a válasz helyes, ha az oszlop egy CHAR (20), de ez nem igaz, ha ez egy VARCHAR (20), valamint a terek nem volt kifejezetten lépett.

Ha nem próbálja meg a CHAR mező nélkül RTrim kapsz egy „string vagy bináris adat lenne csonkítva” hiba.

Válaszolt 20/08/2008 08:06
a forrás felhasználó

szavazat
1

Ha az eredeti adatokat származott char oszlop vagy változó (mielőtt behelyezésre kerülnek ebben a táblázatban), akkor az eredeti adatokat volt a terek csatolt válása előtt a 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

Az élet lecke: Soha ne használjon char.

Válaszolt 16/09/2008 20:54
a forrás felhasználó

szavazat
1

A válasz a rejtélyt, a záró szóközöket megtalálható a ANSI_PADDING

Bővebb információ: SET ANSI_PADDING (-SQL)

Az alapértelmezett ANSI_PADDIN ON. Ez hatással lesz az oszlop csak akkor jön létre, de nem a meglévő oszlopokat.

Mielőtt a frissítést lekérdezés, ellenőrizze az adatokat. Ez lehetett volna veszélybe.

Futtassa a következő lekérdezés megtalálni veszélybe sorok:

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

E sorok sem veszítettek karakterek vagy nincs elég hely hozzá a fájl kiterjesztését.

Válaszolt 17/09/2008 02:46
a forrás felhasználó

szavazat
1

Azt akartam, hogy állítsa David B „életfeladat”. Azt hiszem, meg kell „nem szabad használni char változó hosszúságú sztring értékeket” -> Vannak érvényes felhasználási char adattípus, csak nem annyi, mint egyesek gondolják :)

Válaszolt 17/09/2008 03:56
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more