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 1
karakter konumundan başlayarak 4
karakterleri hiçbir şeyle değiştirmez''
someColumn
bir 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