Wie schneide ich eine Zeichenfolge in SQL Server?

132

In SQL Server 2017 können Sie diese Syntax verwenden, jedoch nicht in früheren Versionen:

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

Antworten:

239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer
Ben Hoffstein
quelle
3
Dies ist der einfachste Weg. Denken Sie daran, Ihre zurückgegebene Spalte als Alias ​​zu verwenden
Miles
1
@Miles - Der Vollständigkeit halber habe ich den Alias ​​hinzugefügt.
Ben Hoffstein
2
Ich verstehe, dass dies der richtige Weg ist, um den Wert zu kürzen. Aber können Sie erklären, warum Sie sowohl LTRIM als auch RTRIM verwenden sollten, wenn wir stattdessen nur TRIM hätten verwenden können?
Code Buster
6
@CodeBuster: In SQL Server ist die TRIM-Funktion auch in der Version 2014 nicht definiert.
Alextansc
7
SQL Server hat jetzt TRIM in der Version 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye
64

Verwenden Sie zum Trimmen auf der rechten Seite:

SELECT RTRIM(Names) FROM Customer

Verwenden Sie zum Trimmen auf der linken Seite:

SELECT LTRIM(Names) FROM Customer

Verwenden Sie zum Trimmen auf beiden Seiten:

SELECT LTRIM(RTRIM(Names)) FROM Customer
Kibbee
quelle
5
Welchen möglichen Grund könnte Microsoft übrigens haben, eine LTRIM- und eine RTRIM-Funktion ohne TRIM aufzunehmen? Es ist eigenartig.
Ben Hoffstein
Weil es überflüssig ist. Dasselbe können Sie mit LTRIM (RTRIM (var)) erreichen.
Kibbee
52
Ja, aber das sind zwei Funktionsaufrufe. Man könnte sagen, dass sie alle redundant sind, da TSQL CHARINDEX und SUBSTRING hat, aber das ist eine idiotische Sichtweise.
Ben Hoffstein
9
Es ist überhaupt nicht überflüssig. Das Fehlen einer einzigen Funktion namens TRIM belastet den Benutzer mit Syntax.
Joel
3
Es war wahrscheinlich ein Versehen oder eines dieser Features, das gestrichen wurde, weil jedes Feature bei -100 Punkten beginnt (was meiner Meinung nach wirklich nur zu inkohärenten Feature-Sets anstelle von priorisierten Feature-Sets führt, IMHO).
Siride
7

Ich gehe davon aus, dass dies eine einmalige Datenbereinigungsübung ist. Stellen Sie anschließend sicher, dass Sie Datenbankeinschränkungen hinzufügen, um in Zukunft fehlerhafte Daten zu vermeiden, z

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

Ziehen Sie auch in Betracht, andere Zeichen (Tabulator, Wagenrücklauf, Zeilenvorschub usw.) nicht zuzulassen, die Probleme verursachen können.

Es kann auch eine gute Zeit sein , diese Namen in aufzuspalten family_name, first_nameetc :)

eines Tages, wenn
quelle
4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
Rasiermesser
quelle
0

In SQL Server 2008 R2 mit SSI-Ausdruck haben wir die Trimmfunktion.

SQL Server Integration Services (SSIS) ist eine Komponente der Microsoft SQL Server-Datenbanksoftware, mit der eine Vielzahl von Datenmigrationsaufgaben ausgeführt werden können.

Die vollständige Beschreibung finden Sie unter diesem Link

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

Diese Funktion weist jedoch einige Einschränkungen auf, die auch von msdn auf dieser Seite erwähnt werden. Dies ist jedoch in SQL Server 2008 R2

TRIM("   New York   ") .The return result is "New York".
rahularyansharma
quelle
3
Dies hat nichts mit MS SQL zu tun, außer dass es sich um ein Produkt handelt, das mit der Datenbank gebündelt ist.
Siride
-1

Erweiterte Version von "REPLACE":

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
quelle