STRING_SPLIT – SQL Server 2016

Tudo sobre banco de dados e SQL

STRING_SPLIT – SQL Server 2016

Umas das novidades do SQL Server 2016 que já teve seu lançamento oficial, é a função ‘STRING_SPLIT‘.

Mais o que essa função faz? A função ‘STRING_SPLIT‘, irá realizar a quebra de um única linha de dados em N possíveis linhas, de acordo com seu delimitador, vamos a prática que ficará bem claro qual é sua real utilidade e como utilizá-la.

Imagine que existe um sistema legado que o desenvolvedor pensou de forma brilhante, no lugar de criar uma tabela que relacione os produtos com suas possíveis unidades, porque não armazenar essa informação na própria tabela de produto separando as diferentes unidades por ‘@’, então vamos concretizar essa imaginação.

Primeiramente será criada tabela utilizada no exemplo.

IF OBJECT_ID('T_PRODUCT') IS NOT NULL
DROP TABLE T_PRODUCT;

GO

CREATE TABLE T_PRODUCT
(
ID_PRODUCT INT IDENTITY(1,1) PRIMARY KEY,
DESCRIPTION VARCHAR(100),
UNIT VARCHAR(100)
);

Tabela criada, é hora de inserir os dados.

INSERT INTO T_PRODUCT (DESCRIPTION, UNIT)
SELECT NEWID(), 'CX@UN@KG'
GO 2

INSERT INTO T_PRODUCT (DESCRIPTION, UNIT)
SELECT NEWID(), 'UN@KG'
GO 2

INSERT INTO T_PRODUCT (DESCRIPTION, UNIT)
SELECT NEWID(), 'KG'
GO 2

Vejam os dados que foram inseridos.

String_Split

Agora em 2016 você faz parte da empresa e o gerente de vendas nacional da empresa, solicita que seja enviado a ele uma lista com todos os produtos e quais suas respectivas unidades de venda, você não vai enviar uma linha que tenha as unidade separadas por ‘@’, agora que entra a utilização da nova função ‘STRING_SPLIT‘.

Notem que no exemplo abaixo, foi feito um ‘CROSS APPLY’, utilizando a nova função do SQL Server 2016 ‘STRING_SPLIT‘, onde, passou-se para função o campo (P.UNIT) que é onde estão as informações que desejam quebrar em linhas, e qual o separador para que seja feita quebra de linha, com isso, para cada ‘@’ encontrado no campo ‘UNIT’, gerou-se uma nova linha como saída na consulta SQL.

SELECT *
FROM T_PRODUCT P
CROSS APPLY STRING_SPLIT(P.UNIT, '@')

String_Split2

Mais como sobrevivemos até os dias atuais sem essa funcionalidade no SQL Server? Existe na internet N funções que faziam exatamente o que essa função nativa no SQL Server 2016 está fazendo, porém, esse tipo não função que era criada não era tão performática quanto a função nativa é, por isso, se em seu banco de dados possui essa função criada por algum desenvolvedor e já está utilizando o SQL Server 2016, mude para função nativa.

Caso tenha curiosidade para saber como eram criadas funções de SPLIT antes da função nativa, procure no google por algo semelhante ‘split sql server’, irá encontrar uma infinidade de exemplos.

 

Nenhum comentário

Adicione seu comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.