Comment couper une chaîne dans SQL Server?

132

Dans SQL Server 2017, vous pouvez utiliser cette syntaxe, mais pas dans les versions antérieures:

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

Réponses:

239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer
Ben Hoffstein
la source
3
c'est la façon la plus simple de le faire, n'oubliez pas d'aliaser votre colonne renvoyée
Miles
1
@Miles - J'ai ajouté l'alias pour être complet.
Ben Hoffstein
2
Je comprends que c'est la bonne façon d'utiliser le découpage de la valeur. mais pouvez-vous expliquer pourquoi utiliser à la fois LTRIM et RTRIM alors que nous aurions pu utiliser simplement TRIM à la place?
Code Buster
6
@CodeBuster: SQL Server n'a pas de fonction TRIM définie, même dans la version 2014.
alextansc
7
SQL Server a maintenant TRIM dans la version 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye
64

Pour couper à droite, utilisez:

SELECT RTRIM(Names) FROM Customer

Pour couper à gauche, utilisez:

SELECT LTRIM(Names) FROM Customer

Pour couper des deux côtés, utilisez:

SELECT LTRIM(RTRIM(Names)) FROM Customer
Kibbee
la source
5
Incidemment, quelle raison pourrait avoir Microsoft pour inclure une fonction LTRIM et RTRIM sans TRIM? C'est étrange.
Ben Hoffstein
Parce que c'est redondant. Vous pouvez accomplir la même chose avec LTRIM (RTRIM (var)).
Kibbee
52
Oui, mais ce sont deux appels de fonction. On pourrait dire qu'ils sont tous redondants puisque TSQL a CHARINDEX et SUBSTRING, mais c'est une façon idiote de voir les choses.
Ben Hoffstein
9
Ce n'est pas du tout redondant. Le fait de ne pas offrir une seule fonction appelée TRIM impose le fardeau de la syntaxe à l'utilisateur.
joelc
3
C'était probablement un oubli, ou l'une de ces fonctionnalités qui a été supprimée car chaque fonctionnalité commence à -100 points (ce qui conduit vraiment à des ensembles de fonctionnalités incohérents au lieu d'ensembles de fonctionnalités prioritaires, à mon humble avis).
siride
7

Je suppose qu'il s'agit d'un exercice de nettoyage des données ponctuel. Une fois cela fait, assurez-vous d'ajouter des contraintes de base de données pour éviter de mauvaises données à l'avenir, par exemple

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

Pensez également à interdire les autres caractères (tabulation, retour chariot, saut de ligne, etc.) susceptibles de poser des problèmes.

Il peut également être un bon moment pour partager ces noms dans family_name, first_name, etc :)

un jour quand
la source
4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
razon
la source
0

dans sql server 2008 r2 avec l'expression ssis, nous avons la fonction trim.

SQL Server Integration Services (SSIS) est un composant du logiciel de base de données Microsoft SQL Server qui peut être utilisé pour effectuer un large éventail de tâches de migration de données.

vous pouvez trouver la description complète sur ce lien

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

mais cette fonction a des limitations en soi qui sont également mentionnées par msdn sur cette page. mais c'est dans sql server 2008 r2

TRIM("   New York   ") .The return result is "New York".
rahularyansharma
la source
3
Cela n'a rien à voir avec MS SQL, sauf que c'est dans un produit fourni avec la base de données.
siride
-1

Version étendue de "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
la source