Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctions SQL Server TRIM, LTRIM et RTRIM

La fonction TRIM de SQL Server est conçue pour supprimer les espaces de début et de fin d'une chaîne de caractères. Un espace de début est un espace blanc qui se produit avant la chaîne réelle. Un espace de fin apparaît après.

Dans cet article, nous allons examiner la fonction TRIM et illustrer son utilisation par des exemples pratiques. Alors, commençons par les bases.

Fonction TRIM dans SQL Server

SQL TRIM est une fonction intégrée qui nous permet de supprimer les caractères inutiles des deux côtés de la chaîne en une seule action. Le plus souvent, nous l'utilisons pour supprimer les espaces blancs. Cette fonction est apparue dans SQL Server 2017, et maintenant elle est également présente dans Azure SQL Database.

La syntaxe de la fonction SQL TRIM est la suivante :

TRIM ( [ caractères FROM ] chaîne )

  • caractères DE est un élément facultatif paramètre qui définit les caractères que nous devons supprimer. Par défaut, ce paramètre s'applique aux espaces des deux côtés de notre chaîne.
  • chaîne est un obligatoire paramètre qui détermine la chaîne où nous devons nous débarrasser des espaces/autres caractères inutiles.

La sortie renvoyée est une chaîne sans les caractères que nous avons déterminés à couper au début et à la fin. Voir l'exemple :

SELECT TRIM( ' example ') AS Result;

La sortie est :

exemple

Comme nous l'avons mentionné, la fonction TRIM peut également supprimer d'autres caractères. Jetez un œil à l'exemple où nous voulons nettoyer la chaîne des caractères et des espaces inutiles :

SELECT TRIM( '.,# ' FROM '# ! example .') AS Result;

La sortie est :

 ! exemple

La fonction SQL TRIM est disponible dans SQL Server à partir de la version 2017, mais il était également possible d'effectuer la tâche avant cette version. Les utilisateurs peuvent appliquer SQL LTRIM et SQL RTRIM les fonctions. Ils sont présents dans toutes les versions prises en charge de SQL Server.

Fonction LTRIM dans SQL Server

Le SQL LTRIM La fonction sert à supprimer les espaces inutiles sur le côté gauche de la chaîne. La syntaxe est la suivante :

LTRIM( chaîne )

chaîne est le paramètre obligatoire qui spécifie la chaîne cible de caractères que nous devons couper sur le côté gauche. La sortie est une copie de la chaîne spécifiée, mais sans les espaces au début :

SELECT LTRIM('   SQL Function');

Sortie :

'Fonction SQL'

Fonction RTRIM dans SQL Server

Le SQL RTRIM La fonction fonctionne de la même manière que LTRIM - la différence est qu'elle supprime les espaces sur le côté droit de la chaîne. La syntaxe est ci-dessous :

RTRIM(chaîne)

chaîne est le paramètre obligatoire qui pointe vers la chaîne de caractères où nous devons supprimer les espaces de fin.

SELECT RTRIM('SQL Server   ');

Sortie :

'SQL Server'

Utiliser LTRIM et RTRIM ensemble

En travaillant avec SQL Server, nous devons souvent supprimer les espaces d'un seul côté de la chaîne. Pourtant, il y a des cas où nous devons effacer la chaîne des deux côtés. La fonction TRIM que nous avons décrite précédemment sert cet objectif, mais, comme nous nous en souvenons, elle n'est disponible que dans SQL Server 2017 et versions ultérieures.

Existe-t-il un moyen de supprimer les espaces de début et de fin d'une chaîne sans la fonction TRIM ? Oui. Nous pouvons utiliser LTRIM et RTRIM ensemble dans une seule requête.

La syntaxe est :

LTRIM(RTRIM(chaîne))

chaîne définit cette chaîne cible de caractères que nous voulons effacer des espaces inutiles des deux côtés. Notez également que nous pouvons mettre LTRIM et RTRIM dans n'importe quel ordre .

SELECT LTRIM(RTRIM('   SQL Server  '));

Sortie :

'SQL Server'

Maintenant que nous avons clarifié l'essence de toutes ces fonctions SQL (TRIM, LTRIM et RTRIM), approfondissons.

Pourquoi les espaces blancs sont importants

On peut se demander pourquoi il serait important de supprimer ces espaces. En termes simples, c'est parce qu'ils peuvent constituer une nuisance lors, par exemple, de la comparaison de valeurs. L'espace lui-même est considéré comme faisant partie d'une chaîne s'il est là, il est donc préférable de se soucier de ces problèmes.

Examinons ces fonctions correctement.

Tout d'abord, nous créons une table simple pour les types de bases de données exécutés dans notre entreprise. Notre tableau comporte trois colonnes. La première est la colonne ID requise pour identifier chaque ligne de manière unique. Le second est DBTypeNameA . Le troisième est le DBTypeNameB .

Les deux dernières colonnes diffèrent par le type de données. DBTypeNameA utilise d'abord le VARCHAR type de données et DBTypeNameB utilise le CHAR type de données.

Pour les deux colonnes, nous allouons la longueur de données de 50.

- Listing 1: Create a Simple Table
USE DB2
GO
CREATE TABLE DBType (
ID INT IDENTITY(1,1)
,DBTypeNameA VARCHAR (50)
,DBTypeNameB CHAR (50))

GO

Notez la différence entre ces types de données.

  • Pour la colonne VARCHAR, SQL Server n'alloue pas l'espace pour 50 caractères que nous attendons dans la colonne ab initio. Nous disons que la colonne doit prévoir un maximum de 50 caractères, mais allouez de l'espace si nécessaire.
  • Pour la colonne CHAR, cette provision est faite pour 50 caractères chaque fois qu'une ligne est insérée, que la valeur réelle ait besoin ou non de cet espace.

Ainsi, l'utilisation de VARCHAR (caractères variables) est un moyen d'économiser de l'espace.

Après avoir créé la table, nous la remplissons à l'aide du code du Listing 2.

-- Listing 2: Populate the Table
USE DB2
GO
INSERT INTO DBType VALUES ('SQL Server','SQL Server');
INSERT INTO DBType VALUES (' SQL Server ',' SQL Server ');
INSERT INTO DBType VALUES ('  SQL Server  ','  SQL Server  ');
INSERT INTO DBType VALUES ('Oracle','Oracle');
INSERT INTO DBType VALUES (' Oracle ',' Oracle ');
INSERT INTO DBType VALUES ('  Oracle  ','  Oracle  ');
INSERT INTO DBType VALUES ('MySQL','MySQL');
INSERT INTO DBType VALUES (' MySQL ',' MySQL ');
INSERT INTO DBType VALUES ('  MySQL  ','  MySQL  ');

Lors du remplissage de notre tableau, nous avons délibérément entré des valeurs avec des espaces de début et de fin. Nous les utiliserons dans notre démonstration.

Lorsque nous interrogeons la table (voir Listing 3), nous pouvons voir la "distorsion" dans les données telles qu'elles sont rendues dans SSMS (Figure 1).

-- Listing 3: Query the Table
USE DB2
GO
SELECT * FROM DBType;

Cette distorsion est visible car nous avons des espaces de tête. Les espaces de fin sont plus difficiles à visualiser de cette façon.

La requête est Listing 4 fournit un regard plus approfondi sur cette "distorsion". Il présente les fonctions LEN et DATALENGTH :

  • LEN() renvoie le nombre de caractères dans une chaîne à l'exclusion des espaces de fin.
  • DATALENGTH() renvoie le nombre d'octets utilisés pour représenter une expression.
-- Listing 4: Query the Table
USE DB2
GO
SELECT DBTypeNameA
, LEN(DBTypeNameA) LenVarcharCol
, DATALENGTH(DBTypeNameA) DataLenVarcharCol
, DBTypeNameB
, LEN(DBTypeNameB) LenCharCol
, DATALENGTH(DBTypeNameB) DataLenCharCol
FROM DBType;

La figure 2 nous montre les variations de longueur d'expressions telles que "SQL Server", "Oracle" et "MySQL" en raison des espaces de début et de fin.

Cela implique que ces expressions ne sont pas les mêmes en ce qui concerne le moteur de requête SQL Server. Nous pouvons le voir clairement en exécutant le code du Listing 5.

-- Listing 5: Query for Specific 
USE DB2
GO
SELECT * FROM DBType WHERE DBTypeNameA='SQL Server';
SELECT * FROM DBType WHERE DBTypeNameA='Oracle';
SELECT * FROM DBType WHERE DBTypeNameA='MySQL';

Le DataLenCharCol Le champ représente la sortie de la fonction DATALENGTH() sur la colonne CHAR. Par conséquent, une conséquence de cette disparité entre « SQL Server » et « SQL Server » est le résultat de la requête affiché à la figure 3.

Nous constatons que même si nous avons trois lignes avec chaque type de base de données, nos requêtes ne renvoient qu'une seule de chaque car les espaces de début et de fin distinguent les valeurs.

Résoudre le problème

Obtenir des résultats corrects pour la requête du Listing 5 est faisable et facile. Nous avons besoin de la fonction SQL Server TRIM() comme indiqué dans le Listing 6.

-- Listing 6: Query for Specific 
USE DB2
GO
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='SQL Server';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='Oracle';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='MySQL';

Sans cette fonction TRIM(), nous pourrions obtenir des résultats erronés dans certains scénarios.

Nous pouvons aller plus loin en chargeant les données dans une table séparée, en supposant que nous voulions résoudre le problème de manière permanente (une sorte de nettoyage des données).

-- Listing 7: Query for Specific 
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB FROM DBType;

Comparez les résultats de la liste 7 (figure 5) avec ceux de la liste 3 (figure 1). Nous pouvons également créer une autre table avec cet ensemble de résultats pour nettoyer les données (voir Listing 8).

-- Listing 8: Create a New Table (Data Cleanup)
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB INTO DBType_New FROM DBType;

SELECT * FROM DBType_New;

De cette façon, nous pouvons résoudre nos problèmes de manière permanente et supprimer la surcharge d'exécution des fonctions chaque fois que nous devons extraire des données de notre table.

Conclusion

Les fonctions SQL Server TRIM() peuvent être utilisées pour supprimer les espaces de début et de fin des chaînes. LTRIM et RTRIM sont deux variantes de cette fonction qui se concentrent respectivement sur les espaces de début (GAUCHE) et de fin (DROITE).

Nous pouvons appliquer TRIM() à la volée pour ranger le jeu de résultats et nous assurer d'obtenir le jeu de résultats correct. De plus, nous pouvons l'utiliser pour supprimer les espaces tout en déplaçant proprement les données d'une table à une autre.

Articles connexes

Comment analyser des chaînes comme un pro à l'aide de la fonction SQL SUBSTRING() ?