O SQL Server 2016 introduziu o STRING_SPLIT, que é muito rápido e um excelente substituto para qualquer implementação caseira que as pessoas fariam antes de 2016.
Infelizmente, STRING_SPLIT oferece suporte apenas a um separador de caractere único, o que nem sempre é suficiente. Alguém conhece uma boa implementação que permita usar vários caracteres no separador?
Bem, você sempre pode usar
REPLACE
para adicionar um delimitador de caractere único ao argumento antes de passá-lo. Você só precisa escolher um caractere que seja improvável/impossível de aparecer nos dados reais. Neste exemplo, digamos que seus dados originais usem três barras verticais como delimitador; Eu escolhi um caractere Unicode aleatoriamente para substituir:Fiz um blog sobre isso com mais detalhes aqui:
Endereçando um comentário:
Ok, vamos pegar sua entrada e ver se minha solução obtém a saída errada.
Resultado é:
E não o que você deve ter assumido (mas não testou) isso:
Se seus dados estiverem em uma tabela, você poderá criar uma exibição para não precisar fatorar essa expressão em todas as suas consultas.
Se isso não funcionar, porque você pode ter um lápis (
✏
) em seus dados e não consegue encontrar um único caractere nos 1.111.998 caracteres Unicode disponíveis que não estarão em seu conjunto de dados, você terá que pularSTRING_SPLIT()
, pois é codificado para aceitar um delimitador de caractere único (separator Is a single character expression
).Alternativas foram respondidas aqui dezenas de vezes antes , muitas antes de
STRING_SPLIT()
existirem. Esses métodos ainda funcionam.Examino muitas alternativas e também discuto as limitações em
STRING_SPLIT()
, nesta série (também discuto por que você pode considerar não fazer isso no T-SQL usando qualquer método):