sql >> Base de Datos >  >> RDS >> Sqlserver

Funciones TRIM, LTRIM y RTRIM de SQL Server

La función TRIM de SQL Server está diseñada para eliminar los espacios en blanco iniciales y finales de una cadena de caracteres. Un espacio inicial es un espacio en blanco que aparece antes de la cadena real. Un espacio final ocurre después.

En este artículo, examinaremos la función TRIM e ilustraremos su uso con ejemplos prácticos. Entonces, comencemos desde lo básico.

Función TRIM en SQL Server

SQL TRIM es una función integrada que nos permite recortar los caracteres innecesarios en ambos lados de la cadena con una sola acción. Con mayor frecuencia, lo usamos para eliminar espacios en blanco. Esta función apareció en SQL Server 2017 y ahora también está presente en Azure SQL Database.

La sintaxis de la función SQL TRIM es la siguiente:

TRIM ([caracteres DE] cadena)

  • personajes DE es un opcional parámetro que define qué caracteres debemos eliminar. De forma predeterminada, este parámetro se aplica a los espacios en ambos lados de nuestra cadena.
  • cadena es un obligatorio parámetro que determina la cadena donde necesitamos deshacernos de espacios/otros caracteres innecesarios.

El resultado devuelto es una cadena sin los caracteres que determinamos que se recortarán al principio y al final. Ver el ejemplo:

SELECT TRIM( ' example ') AS Result;

La salida es:

ejemplo

Como mencionamos, la función TRIM también puede eliminar otros caracteres. Eche un vistazo al ejemplo en el que queremos limpiar la cadena de caracteres y espacios innecesarios:

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

La salida es:

! ejemplo

La función SQL TRIM está disponible en SQL Server a partir de la versión 2017, pero también era posible realizar la tarea antes de esa versión. Los usuarios podrían aplicar SQL LTRIM y SQL RTRIM funciones Están presentes en todas las versiones compatibles de SQL Server.

Función LTRIM en SQL Server

El SQL LTRIM La función sirve para eliminar espacios innecesarios en el lado izquierdo de la cadena. La sintaxis es la siguiente:

LTRIM(cadena)

cadena es el parámetro obligatorio que especifica la cadena de caracteres de destino que necesitamos recortar en el lado izquierdo. El resultado es una copia de la cadena especificada, pero sin los espacios al principio:

SELECT LTRIM('   SQL Function');

Salida:

'Función SQL'

Función RTRIM en SQL Server

El SQL RTRIM La función funciona de la misma manera que LTRIM:la diferencia es que elimina los espacios en el lado derecho de la cadena. La sintaxis es la siguiente:

RTRIM(cadena)

cadena es el parámetro requerido que apunta a la cadena de caracteres donde necesitamos eliminar los espacios finales.

SELECT RTRIM('SQL Server   ');

Salida:

'Servidor SQL'

Uso de LTRIM y RTRIM juntos

Al trabajar con SQL Server, a menudo necesitamos eliminar espacios solo de un lado de la cadena. Aún así, hay casos en los que necesitamos limpiar la cuerda en ambos lados. La función TRIM que describimos anteriormente sirve para ese objetivo, pero, como recordamos, solo está disponible en SQL Server 2017 y superior.

¿Hay alguna manera de eliminar los espacios iniciales y finales de una cadena sin la función TRIM? Sí. Podemos usar LTRIM y RTRIM juntos en una consulta.

La sintaxis es:

LTRIM(RTRIM(cadena))

cadena define esa cadena de caracteres de destino que queremos borrar de espacios innecesarios en ambos lados. Note también que podemos poner LTRIM y RTRIM en cualquier orden .

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

Salida:

'Servidor SQL'

Ahora que hemos aclarado la esencia de todas estas funciones SQL (TRIM, LTRIM y RTRIM), profundicemos más.

Por qué son importantes los espacios en blanco

Uno podría preguntarse por qué podría ser importante eliminar dichos espacios. En términos simples, es porque pueden constituir una molestia a la hora, por ejemplo, de comparar valores. El espacio en blanco en sí mismo se considera parte de una cadena si está allí, por lo tanto, es mejor preocuparse por estos problemas.

Examinemos estas funciones correctamente.

Primero, creamos una tabla simple para los tipos de bases de datos que se ejecutan en nuestra empresa. Nuestra tabla tiene tres columnas. La primera es la columna de ID requerida para identificar cada fila de manera única. El segundo es DBTypeNameA . El tercero es el DBTypeNameB .

Las dos últimas columnas difieren según el tipo de datos. DBTypeNameA primero usa el VARCHAR tipo de datos y DBTypeNameB usa el CHAR tipo de datos.

Para ambas columnas, asignamos la longitud de datos 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

Observe la diferencia entre estos tipos de datos.

  • Para la columna VARCHAR, SQL Server no asigna el espacio para 50 caracteres que esperamos en la columna ab initio. Decimos que la columna debe prever un máximo de 50 caracteres, pero asigne espacio según sea necesario.
  • Para la columna CHAR, se prevén 50 caracteres cada vez que se inserta una fila, sin importar si el valor real necesita ese espacio o no.

Por lo tanto, usar VARCHAR (caracteres variables) es una forma de ahorrar espacio.

Después de crear la tabla, completamos la misma usando el código del Listado 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  ');

Al llenar nuestra tabla, hemos ingresado deliberadamente valores con espacios al principio y al final. Los usaremos en nuestra demostración.

Cuando consultamos la tabla (consulte el Listado 3), podemos ver la "distorsión" en los datos tal como se muestran en SSMS (Figura 1).

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

Esta distorsión es visible porque tenemos espacios iniciales. Los espacios finales son más difíciles de visualizar de esta manera.

La consulta del Listado 4 proporciona una mirada más profunda a esta "distorsión". Introduce las funciones LEN y DATALENGTH:

  • LEN() devuelve el número de caracteres en una cadena excluyendo los espacios finales.
  • DATALENGTH() devuelve el número de bytes utilizados para representar una expresión.
-- 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 figura 2 nos muestra variaciones en la longitud de expresiones como "SQL Server", "Oracle" y "MySQL" debido a los espacios iniciales y finales.

Esto implica que estas expresiones no son las mismas en lo que respecta al motor de consultas de SQL Server. Podemos ver esto claramente al ejecutar el código en el Listado 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';

El DataLenCharCol El campo representa la salida de la función DATALENGTH() en la columna CHAR. Por lo tanto, una consecuencia de esta disparidad entre "SQL Server" y "SQL Server" es el resultado de la consulta que se muestra en la Figura 3.

Vemos que aunque tenemos tres filas con cada tipo de base de datos, nuestras consultas devuelven solo uno de cada porque los espacios iniciales y finales distinguen los valores.

Resolviendo el Problema

Obtener resultados correctos para la consulta del Listado 5 es factible y fácil. Necesitamos la función TRIM() de SQL Server como se muestra en el Listado 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';

Sin esta función TRIM(), podríamos obtener resultados erróneos en algunos escenarios.

Podemos llevar esto más allá cargando datos en una tabla separada, asumiendo que queremos resolver el problema de forma permanente (una especie de limpieza de datos).

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

Compare los resultados del Listado 7 (Figura 5) con los del Listado 3 (Figura 1). También podemos crear otra tabla con este conjunto de resultados para limpiar los datos (consulte el Listado 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 esta manera, podemos resolver nuestros problemas de forma permanente y eliminar la sobrecarga de ejecutar funciones cada vez que necesitamos extraer datos de nuestra tabla.

Conclusión

Las funciones TRIM() de SQL Server se pueden usar para eliminar los espacios iniciales y finales de las cadenas. LTRIM y RTRIM son dos variantes de esta función que se centran en los espacios iniciales (IZQUIERDA) y finales (DERECHA) respectivamente.

Podemos aplicar TRIM() sobre la marcha para ordenar el conjunto de resultados y asegurarnos de obtener el conjunto de resultados correcto. Además, podemos usarlo para eliminar espacios mientras movemos los datos ordenadamente de una tabla a otra.

Artículos relacionados

¿Cómo analizar cadenas como un profesional usando la función SQL SUBSTRING()?