Jak przyciąć ciąg w SQL Server przed 2017?


134

W programie SQL Server 2017 można używać tej składni, ale nie we wcześniejszych wersjach:

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

Odpowiedzi:


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

4
to najłatwiejszy sposób, aby to zrobić, pamiętaj tylko, aby aliasować zwracaną kolumnę
Miles,

2
@Miles - dodałem alias dla kompletności.
Ben Hoffstein

3
Rozumiem, że jest to właściwy sposób przycinania wartości. ale czy możesz wyjaśnić, dlaczego używać zarówno LTRIM, jak i RTRIM, skoro zamiast tego mogliśmy użyć tylko TRIM?
Code Buster

7
@CodeBuster: SQL Server nie ma zdefiniowanej funkcji TRIM, nawet w wersji 2014.
alextansc

8
SQL Server ma teraz TRIM w wersji 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye

65

Aby przyciąć po prawej stronie, użyj:

SELECT RTRIM(Names) FROM Customer

Aby przyciąć po lewej stronie, użyj:

SELECT LTRIM(Names) FROM Customer

Aby przyciąć po obu stronach, użyj:

SELECT LTRIM(RTRIM(Names)) FROM Customer

7
Nawiasem mówiąc, jaki możliwy powód może mieć firma Microsoft dla włączenia funkcji LTRIM i RTRIM bez TRIM? To dziwne.
Ben Hoffstein,

1
Ponieważ jest zbędny. Możesz osiągnąć to samo dzięki LTRIM (RTRIM (var)).
Kibbee

54
Tak, ale to dwa wywołania funkcji. Można powiedzieć, że wszystkie są zbędne, ponieważ TSQL ma CHARINDEX i SUBSTRING, ale jest to idiotyczny sposób patrzenia na to.
Ben Hoffstein

10
To wcale nie jest zbędne. Brak jednej funkcji zwanej TRIM nakłada na użytkownika ciężar składni.
joelc

4
Prawdopodobnie było to przeoczenie lub jedna z tych funkcji, które zostały zablokowane, ponieważ każda funkcja zaczyna się od -100 punktów (co tak naprawdę prowadzi do niespójnych zestawów funkcji zamiast zestawów funkcji z priorytetami, IMHO).
siride

8

Zakładam, że jest to jednorazowe czyszczenie danych. Po zakończeniu upewnij się, że dodałeś ograniczenia bazy danych, aby zapobiec nieprawidłowym danym w przyszłości, np

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

Rozważ także zablokowanie innych znaków (tabulatora, powrotu karetki, nowego wiersza itp.), Które mogą powodować problemy.

Może to być również dobry moment, aby podzielić te nazwy się family_name, first_nameitp :)


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

1

w SQL Server 2008 R2 z wyrażeniem ssis mamy funkcję trim.

SQL Server Integration Services (SSIS) to składnik oprogramowania bazy danych Microsoft SQL Server, którego można używać do wykonywania szerokiego zakresu zadań migracji danych.

pełny opis można znaleźć pod tym linkiem

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

ale ta funkcja sama w sobie ma pewne ograniczenia, o których również wspomina msdn na tej stronie. ale to jest w SQL Server 2008 R2

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

4
Nie ma to nic wspólnego z MS SQL poza tym, że znajduje się w produkcie dołączonym do bazy danych.
siride

0

Rozszerzona wersja „REPLACE”:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]

0

Aby przyciąć dowolny zestaw znaków od początku i końca ciągu, możesz wykonać następujący kod, w którym @TrimPattern definiuje znaki do przycięcia. W tym przykładzie przycinane są znaki spacji, tabulacji, LF i CR:

Zadeklaruj @Test nvarchar (50) = Concat ('', char (9), char (13), char (10), '', 'TEST', '', char (9), char (10), char ( 13), '', 'Test', '', znak (9), '', znak (9), znak (13), '')

ZADEKLARUJ @TrimPattern nvarchar (max) = '% [^' + char (9) + char (13) + char (10) + ']%'

WYBIERZ SUBSTRING (@Test, PATINDEX (@TrimPattern, @Test), LEN (@Test) - PATINDEX (@TrimPattern, @Test) - PATINDEX (@TrimPattern, LTRIM (REVERSE (@Test))) + 2)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.