Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Comando SUBSTRING em SQL:uma cartilha


Semelhante ao meu artigo sobre o comando SQL Server STUFF , hoje estaremos examinando o comando do servidor SQL SUBSTRING. É semelhante ao comando STUFF em relação aos parâmetros que aceita.

Os parâmetros aceitos pela SUBSTRING são os seguintes:
SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

O comando SUBSTRING é predominante na maioria dos principais bancos de dados padrão, como SQL Server, MySQL, Oracle e Postgres.

Vamos explorar a função SUBSTRING com vários exemplos.

Seção 1 – Exemplos simples de SUBSTRING


Neste primeiro exemplo, um valor de string de “ABC” será passado para a função SUBSTRING. Cada chamada terá o argumento de posição inicial incrementado em 1. O argumento de comprimento permanecerá 1 para cada chamada.
SELECT SUBSTRING('ABC',1,1); --RETURNS : A

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

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

A partir desses exemplos podemos ver a funcionalidade geral da função SUBSTRING, cada incremento na posição inicial desloca a letra retornada. Na execução #1 o valor é A, #2 o valor é B e na #3 o valor é C.

Um recurso interessante da função SUBSTRING é que o parâmetro de comprimento é ininterrupto se exceder o comprimento do valor que você está analisando. Por exemplo, o valor “1000” tem um comprimento de 4 dígitos. Se analisado com a seguinte consulta especificando um comprimento de 6, SUBSTRING retornará a string original.
SELECT SUBSTRING('1000',1,6); --RETURNS : 1000

Seção 2 – Analisando dados com a função SUBSTRING


Para o próximo exemplo, vamos supor que temos um banco de dados para manter dados sobre carros usados. No entanto, em vez de usar um modelo de dados relacional de várias tabelas, o banco de dados contém apenas uma chave primária e um SKU ou unidade de manutenção de estoque. Este SKU pode ser usado para encontrar vários campos em torno dos recursos de um carro usando a seguinte chave:
TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE

*Nestes exemplos, a milhagem é representada em uma escala de 1/1.000, ou seja, 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

A saída da tabela de carros usados ​​é:
ID CAR_SKU
1 TOY-CEL-R-1990-150
2 JEP-WRG-W-2019-15
3 FRD-ESC-G-1998-80

Usando a função SUBSTRING, esses valores podem ser analisados ​​atribuindo a posição inicial correta e os parâmetros de comprimento ao 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;
FAÇA MODELO COR ANO MILAGEM
BRINQUEDO CEL R 1990 150000
PEC WRG W 2019 15.000
FRD ESC G 1998 80.000

Seção 3 – Abstraindo a lógica SQL SUBSTRING para exibições


Usando a função SQL SUBSTRING, conseguimos analisar os vários recursos de cada veículo em nosso banco de dados. Vamos dar um passo adiante e traduzir essa saída em dados mais significativos criando uma visualização na consulta SUBSTRING.

Em um modelo de dados relacional, isso será obtido usando junções para incorporar a instrução CASE WHEN para traduzir os 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
FAÇA MODELO COR ANO MILAGEM
TOYOTA CELICA VERMELHO 1990 150000
JIPE WRANGLER BRANCO 2019 15.000
FORD ESCAPE VERDE 1998 80.000

Seção 4 – SUBSTRING A alternativas para valores inteiros


A função SUBSTRING é explicitamente para valores de string, portanto, a consulta a seguir que tentar analisar um valor inteiro com SUBSTRING falhará.
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.

A alternativa ao analisar valores inteiros é a função LEFT ou RIGHT, embora essa abordagem perca um pouco da flexibilidade apresentada com a função SUBSTRING.
SELECT LEFT(10000,1); --RETURNS : 1
SELECT RIGHT(1000,1) ;  --RETURNS : 0

Situacionalmente, você também pode converter explicitamente o valor inteiro como uma string e substring o valor convertido:
SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1

Resumo


Este artigo cobriu os parâmetros necessários para usar a função SUBSTRING, que é um forte argumento para uma posição inicial e um comprimento. Com um modelo de dados sem relação, usamos o método SUBSTRING para extrair os recursos do carro de uma tabela de 1 campo e construir uma visão com alguma lógica de transformação incorporada a ela.

O método SUBSTRING é uma ótima função para saber ao realizar ETL ou analisar os dados dentro de um banco de dados. Ele pode ser usado para extrair pontos de dados importantes significativos dos dados já existentes dentro de seu banco de dados.