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

Comando SUBSTRING en SQL:una introducción

Similar a mi artículo sobre el comando SQL Server STUFF , hoy examinaremos el comando del servidor SQL SUBSTRING. Es similar al comando STUFF en cuanto a los parámetros que acepta.

Los parámetros aceptados por SUBSTRING son los siguientes:

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

El comando SUBSTRING prevalece en la mayoría de las principales bases de datos estándar como SQL Server, MySQL, Oracle y Postgres.

Exploremos la función SUBSTRING con varios ejemplos.

Sección 1:Ejemplos simples de SUBCADENA

En este primer ejemplo, se pasará un valor de cadena de "ABC" a la función SUBCADENA. Cada llamada tendrá el argumento de posición inicial incrementado en 1. El argumento de longitud permanecerá en 1 para cada llamada.

SELECT SUBSTRING('ABC',1,1); --RETURNS : A

SELECT SUBSTRING('ABC',2,1); --RETURNS : B

SELECT SUBSTRING('ABC',3,1); --RETURNS : C

A partir de estos ejemplos, podemos ver la funcionalidad general de la función SUBSTRING, cada incremento en la posición inicial cambia la letra devuelta. En la ejecución #1 el valor es A, #2 el valor es B y en #3 el valor es C.

Una característica interesante de la función SUBSTRING es que el parámetro de longitud no se rompe si excede la longitud del valor que está analizando. Por ejemplo, el valor “1000” tiene una longitud de 4 dígitos. Si se analiza con la siguiente consulta especificando una longitud de 6, SUBSTRING devuelve la cadena original.

SELECT SUBSTRING('1000',1,6); --RETURNS : 1000

Sección 2:análisis de datos con la función SUBSTRING

Para el siguiente ejemplo, supongamos que tenemos una base de datos para guardar datos sobre autos usados. Sin embargo, en lugar de utilizar un modelo de datos relacionales de tablas múltiples, la base de datos contiene una clave principal y un SKU o unidad de mantenimiento de existencias solamente. Este SKU se puede usar para encontrar múltiples campos alrededor de las características de un automóvil usando la siguiente clave:

TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE

*En estos ejemplos, el kilometraje se representa en una escala de 1/1000, es decir, 100 =100 000

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'CODESIGHT_DEMOS')
BEGIN
  CREATE DATABASE CODESIGHT_DEMOS;
END;
GO

USE CODESIGHT_DEMOS;

IF OBJECT_ID('USEDCARS') IS NOT NULL DROP TABLE USEDCARS
CREATE TABLE USEDCARS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
CAR_SKU VARCHAR(30)
)

--MAKE--MODEL--COLOR--YEAR--MILEAGE *1000
INSERT INTO USEDCARS
VALUES('TOY-CEL-R-1990-150')

INSERT INTO USEDCARS
VALUES('JEP-WRG-W-2019-15')

INSERT INTO USEDCARS
VALUES('FRD-ESC-G-1998-80')

SELECT * FROM USEDCARS

La salida de la tabla de autos usados ​​es:

ID COCHE_SKU
1 JUGUETE-CEL-R-1990-150
2 JEP-WRG-W-2019-15
3 FRD-ESC-G-1998-80

Con la función SUBSTRING, estos valores se pueden analizar asignando la posición inicial correcta y los parámetros de longitud al campo CAR_SKU.

SELECT SUBSTRING(CAR_SKU,1,3) AS MAKE,
SUBSTRING(CAR_SKU,5,3) AS MODEL,
SUBSTRING(CAR_SKU,9,1) AS COLOR,
SUBSTRING(CAR_SKU,11,4) AS YEAR,
SUBSTRING(CAR_SKU,16,3) * 1000 AS MILEAGE
FROM USEDCARS;
HACER MODELO COLOR AÑO MILLAS
JUGUETE CEL R 1990 150000
JEP WRG W 2019 15000
FRD ESC G 1998 80000

Sección 3:abstracción de la lógica SUBSTRING SQL en vistas

Usando la función SQL SUBSTRING, pudimos analizar las diversas características de cada vehículo en nuestra base de datos. Vayamos un paso más allá y traduzcamos ese resultado en datos más significativos creando una vista en la consulta SUBSTRING.

En un modelo de datos relacionales, esto se logrará utilizando uniones para incorporar la declaración CASE WHEN para traducir los valores.

CREATE VIEW  VW_CAR_INVENTORY

AS

SELECT 

CASE WHEN SUBSTRING(CAR_SKU,1,3) = 'TOY' THEN 'TOYOTA'
     WHEN SUBSTRING(CAR_SKU,1,3) = 'JEP' THEN 'JEEP'
	 WHEN SUBSTRING(CAR_SKU,1,3) = 'FRD' THEN 'FORD'
	 END AS MAKE,

CASE WHEN SUBSTRING(CAR_SKU,5,3) = 'CEL' THEN 'CELICA'
     WHEN SUBSTRING(CAR_SKU,5,3) = 'WRG' THEN 'WRANGLER'
	 WHEN SUBSTRING(CAR_SKU,5,3) = 'ESC' THEN 'ESCAPE'
    END AS MODEL,

CASE WHEN SUBSTRING(CAR_SKU,9,1) = 'R' THEN 'RED'
     WHEN SUBSTRING(CAR_SKU,9,1) = 'W' THEN 'WHITE'
	 WHEN SUBSTRING(CAR_SKU,9,1) = 'G' THEN 'GREEN'
    END AS COLOR,

SUBSTRING(CAR_SKU,11,4) AS YEAR,

SUBSTRING(CAR_SKU,16,3) * 1000 AS MILEAGE

FROM USEDCARS
HACER MODELO COLOR AÑO MILLAS
TOYOTA CELICA ROJO 1990 150000
JEEP ENTRENADOR BLANCO 2019 15000
FORD ESCAPE VERDE 1998 80000

Sección 4:SUBSTRING A Alternativas para valores enteros

La función SUBSTRING es explícita para valores de cadena, por lo que la siguiente consulta que intenta analizar un valor entero con SUBSTRING fallará.

SELECT SUBSTRING(1000,1,1); 

--Msg 8116, Level 16, State 1, Line 78 Argument data type int is invalid for argument 1 of substring function.

La alternativa al analizar valores enteros es la función IZQUIERDA o DERECHA, aunque este enfoque pierde parte de la flexibilidad que presenta la función SUBCADENA.

SELECT LEFT(10000,1); --RETURNS : 1
SELECT RIGHT(1000,1) ;  --RETURNS : 0

Situacionalmente, también podría convertir explícitamente el valor entero como una cadena y subcadenar el valor emitido:

SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1

Resumen

Este artículo cubrió los parámetros necesarios para usar la función SUBSTRING, que es un argumento sólido para una posición inicial y una longitud. Con un modelo de datos sin relación, usamos el método SUBSTRING para extraer las características del automóvil de una tabla de 1 campo y construir una vista con alguna lógica de transformación incorporada.

El método SUBSTRING es una gran función para saber cuándo se realiza ETL o se analizan los datos dentro de una base de datos. Se puede usar para extraer puntos de datos clave significativos de los datos ya existentes dentro de su base de datos.