Bagaimana cara memotong string di SQL Server?

132

Di SQL Server 2017, Anda bisa menggunakan sintaks ini, tetapi tidak di versi sebelumnya:

SELECT Name = TRIM(Name) FROM dbo.Customer;
Eric Labashosky
sumber

Jawaban:

239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer
Ben Hoffstein
sumber
3
ini adalah cara termudah untuk melakukannya, ingat saja untuk alias kolom Anda dikembalikan
Miles
1
@Miles - Saya menambahkan alias untuk kelengkapan.
Ben Hoffstein
2
Saya mengerti bahwa ini adalah cara yang tepat untuk menggunakan pemangkasan nilai. tetapi dapatkah Anda menjelaskan mengapa menggunakan LTRIM dan RTRIM saat kami dapat menggunakan TRIM saja?
Code Buster
6
@CodeBuster: SQL Server tidak memiliki fungsi TRIM yang ditentukan, bahkan dalam versi 2014.
alextansc
7
SQL Server sekarang memiliki TRIM dalam versi 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye
64

Untuk Potong di sebelah kanan, gunakan:

SELECT RTRIM(Names) FROM Customer

Untuk Potong di sebelah kiri, gunakan:

SELECT LTRIM(Names) FROM Customer

Untuk Potong di kedua sisi, gunakan:

SELECT LTRIM(RTRIM(Names)) FROM Customer
Kibbee
sumber
5
Secara kebetulan, alasan apa yang mungkin dimiliki Microsoft untuk menyertakan fungsi LTRIM dan RTRIM tanpa TRIM? Ini aneh.
Ben Hoffstein
Karena itu mubazir. Anda dapat mencapai hal yang sama dengan LTRIM (RTRIM (var)).
Kibbee
52
Ya, tapi itu adalah dua panggilan fungsi. Bisa dibilang semuanya mubazir karena TSQL memiliki CHARINDEX dan SUBSTRING, tapi itu cara yang konyol untuk melihatnya.
Ben Hoffstein
9
Sama sekali tidak berlebihan. Tidak menawarkan fungsi tunggal yang disebut TRIM menempatkan beban sintaks pada pengguna.
joelc
3
Itu mungkin sebuah kekhilafan, atau salah satu dari fitur-fitur itu yang dihilangkan karena setiap fitur mulai dari -100 poin (yang benar-benar hanya mengarah pada set fitur yang tidak koheren daripada set fitur yang diprioritaskan, IMHO).
siride
7

Saya menganggap ini adalah latihan penggosokan data satu kali. Setelah selesai, pastikan Anda menambahkan batasan basis data untuk mencegah data buruk di masa mendatang misalnya

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

Pertimbangkan juga untuk tidak mengizinkan karakter lain (tab, carriage return, line feed, dll) yang dapat menyebabkan masalah.

Hal ini juga dapat menjadi waktu yang baik untuk membagi mereka ke dalam Nama family_name, first_namedll :)

suatu hari nanti
sumber
4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
Razon
sumber
0

di sql server 2008 r2 dengan ekspresi ssis kami memiliki fungsi trim.

SQL Server Integration Services (SSIS) adalah komponen perangkat lunak basis data Microsoft SQL Server yang dapat digunakan untuk melakukan berbagai tugas migrasi data.

Anda dapat menemukan deskripsi lengkap tentang tautan ini

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

tetapi fungsi ini memiliki beberapa batasan dalam dirinya sendiri yang juga disebutkan oleh msdn pada halaman itu. tapi ini di sql server 2008 r2

TRIM("   New York   ") .The return result is "New York".
rahularyansharma
sumber
3
Ini tidak ada hubungannya dengan MS SQL kecuali bahwa itu dalam produk yang dibundel dengan database.
siride
-1

Versi "REPLACE" yang diperluas:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
Kai-Ove Böhnisch
sumber