SQL Server'da bir dize nasıl kırpılır?


132

SQL Server 2017'de bu sözdizimini kullanabilirsiniz, ancak önceki sürümlerde kullanamazsınız:

SELECT Name = TRIM(Name) FROM dbo.Customer;

Yanıtlar:


239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer

3
bu sadece takma hatırlamak sütun iade edilen, bunu yapmak için en kolay yoludur
Miles

1
@Miles - Tamlık için takma adı ekledim.
Ben Hoffstein

2
Değerin kırpılmasını kullanmanın doğru yolu olduğunu anlıyorum. ama bunun yerine sadece TRIM kullanabileceğimiz halde neden hem LTRIM hem de RTRIM kullanmamız gerektiğini açıklayabilir misiniz?
Code Buster

6
@CodeBuster: SQL Server, 2014 sürümünde bile TRIM işlevine sahip değildir.
alextansc

7
SQL Server artık 2017 sürümünde TRIM'e sahip. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye

64

Sağ tarafta Kırpmak için şunu kullanın:

SELECT RTRIM(Names) FROM Customer

Solda Kırpmak için şunu kullanın:

SELECT LTRIM(Names) FROM Customer

Her iki tarafı da kırpmak için şunları kullanın:

SELECT LTRIM(RTRIM(Names)) FROM Customer

5
Bu arada, Microsoft'un TRIM olmadan bir LTRIM ve RTRIM işlevini dahil etmek için hangi olası nedeni olabilir? Tuhaf.
Ben Hoffstein

Çünkü gereksizdir. Aynı şeyi LTRIM (RTRIM (var)) ile de gerçekleştirebilirsiniz.
Kibbee

52
Evet, ama bu iki işlev çağrısı. TSQL'de CHARINDEX ve SUBSTRING olduğu için hepsinin gereksiz olduğunu söyleyebilirsin, ama bu ona bakmanın aptalca bir yolu.
Ben Hoffstein

9
Hiç gereksiz değil. TRIM adlı tek bir işlevin sunulmaması sözdizimi yükünü kullanıcıya yükler.
joelc

3
Muhtemelen bir gözden geçirmedir veya her özellik -100 noktadan başladığı için (gerçekten sadece öncelikli özellik setleri, IMHO yerine tutarsız özellik setlerine yol açtığı için) akslanan özelliklerden biriydi.
siride

7

Bunun tek seferlik bir veri temizleme çalışması olduğunu varsayıyorum. Bir kez yaptıktan sonra, gelecekte kötü verileri önlemek için veritabanı kısıtlamaları eklediğinizden emin olun.

ALTER TABLE Customer ADD
   CONSTRAINT customer_names__whitespace
      CHECK (
             Names NOT LIKE ' %'
             AND Names NOT LIKE '% '
             AND Names NOT LIKE '%  %'
            );

Ayrıca sorunlara neden olabilecek diğer karakterlere (sekme, satır başı, satır besleme vb.) İzin vermeyin.

Aynı zamanda içine bu Adları bölmek için iyi bir zaman olabilir family_name, first_namevb :)


4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author

0

sql server 2008 r2'de ssis ifadesi ile trim fonksiyonuna sahibiz.

SQL Server Integration Services (SSIS), çok çeşitli veri taşıma görevlerini gerçekleştirmek için kullanılabilen Microsoft SQL Server veritabanı yazılımının bir bileşenidir.

tam açıklamayı bu bağlantıda bulabilirsiniz

http://msdn.microsoft.com/en-us/library/ms139947.aspx

ancak bu işlevin kendi içinde bazı sınırlamaları vardır ve bu da bu sayfada msdn tarafından da bahsedilmektedir. ama bu sql server 2008 r2'de

TRIM("   New York   ") .The return result is "New York".

3
Bunun, veritabanıyla birlikte paketlenmiş bir üründe olması dışında MS SQL ile ilgisi yoktur.
siride

-1

"DEĞİŞTİR" in genişletilmiş sürümü:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.