Yanıtlar:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Düzenleme: Açıklamak için, SAĞ 2 argüman alır - üzerinde çalışacak dize (veya sütun) ve döndürülecek karakter sayısı (dizenin "sağ" tarafında başlayarak). LEN sütun verilerinin uzunluğunu döndürür ve SAĞ fonksiyonumuzun en soldaki 4 karakteri "geride" bırakması için dördü çıkarırız.
Umarım bu mantıklıdır.
Tekrar düzenleyin - Andrew'un yanıtını okudum ve doğru şekilde çok iyi yorumlanmış olabilir ve yanılmış olabilirim. Durum buysa (ve yalnızca doktor sonuçları döndürmek yerine tabloyu GÜNCELLEMEK istiyorsanız) bunu yapabilirsiniz:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Doğru yolda, ancak çözümü 4 karakteri, dizinin başında tutar, söz konusu 4 karakteri atmak yerine tutacaktır .
COL_LENGTH('MyTable', 'MyColumn')yerine kullanmak LEN(MyColumn)zorunda kaldım çünkü benim durumumda, sütundaki gerçek içeriğin boyutu ne olursa olsun ilk n karakteri hariç tutmak istedim, ancak bu bundan başka iyi çalıştı!
Stuff(someColumn, 1, 4, '')
Bu, ilk 1karakter konumundan başlayarak 4karakterleri hiçbir şeyle değiştirmez''
someColumnbir CTE veya bir şeyden bir alt seçim gibi karmaşık bir şeyse, bunun iki kez değerlendirilmesini gerektirmez.
Neden 2 dize fonksiyonuna sahip olmak için LEN kullanıyorsunuz? Tek ihtiyacınız olan karakter 5 ...
...SUBSTRING (Code1, 5, 8000)...
Bunu dene:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
İşte yapmaya çalıştığınız şeyin basit bir maketi:
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)
Bu nedenle, kırpmak istediğiniz alana karşı son ifadeyi kullanın :)
SUBSTRING işlevi, FIFTH karakterinden başlayarak ve CODE1 daha az 4 (başlangıçta atlanan karakter sayısı) boyunca devam ederek Code1'i keser.
Bunu SQL'de de yapabilirsiniz ..
substring(StudentCode,4,len(StudentCode))
sözdizimi
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
Değerlerin 4'ten az olabileceği durumlarda üst yanıt uygun değildir.
Negatifleri kabul etmediği için "Doğru işleve geçersiz uzunluk parametresi iletildi" iletisini alırsınız. Bir CASE deyimi kullanın:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
4'ten küçük değerler hata yerine aşağıdaki şaşırtıcı davranışı verir, çünkü negatif değerleri SAĞ değerine geçirmek dizenin tamamı yerine ilk karakterleri keser. Bunun RIGHT(MyColumn, -5)yerine kullanımı daha mantıklı .
"-5" yerine en çok yanıt alanın "uzunluk - 5" ifadesini kullandığınızda karşılaşanları karşılaştıran bir örnek:
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
Amaç için mükemmel olan yerleşik trim işlevi var.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
DB2 kullanımı için paylaşmak iyi olur:
INSERT(someColumn, 1, 4, '')
Stuff DB2'de desteklenmiyor