12th Dec 2022 8 minutos de leitura A função SQL Substring em 5 exemplos Tihomir Babic sql aprender sql text functions Índice Qual é a função SUBSTRING()? Como funciona o SUBSTRING()? Exemplo 1: Substring From a String Literal A Tabela dos Funcionários Exemplo 2: Substring From a Column Exemplo 3: Substring Sem o Argumento de Comprimento Exemplo 4: POSITION() e CHARINDEX() Exemplo 5: COMPRIMENTO() + POSIÇÃO() Saiba mais sobre SUBSTRING () e trabalhar com dados de texto Trabalhando com dados de texto em SQL? Explicamos como obter valores a partir de qualquer ponto de uma cadeia de caracteres. Quando você pensa em trabalhar com dados em SQL, seu primeiro pensamento provavelmente é um banco de dados cheio de números e seu código SQL fazendo cálculos muito extravagantes. Mas texto também são dados! É muito comum encontrar dados de texto em bancos de dados. Você não só tem que extraí-los, mas muitas vezes também tem que manipulá-los. As funções que lhe permitem fazê-lo são chamadas funções de texto. Para qualquer um que queira praticar as funções SQL, eu recomendo nossa Funções Comuns em SQL curso. Ele contém 211 exercícios e ensina como usar o texto comum, numéricos e funções de data e hora em SQL. Uma das funções de texto comuns que o curso abrange é SUBSTRING(). Neste artigo, temos cinco exemplos de negócios da vida real que cobrem os principais usos desta função. Alguns exemplos podem parecer complicados se você não estiver familiarizado com as funções de texto, então certifique-se de ter ao seu lado a folha de consultas Funções Comuns em SQL ou uma visão geral das funções de texto SQL. Qual é a função SUBSTRING()? SUBSTRING() é uma função de texto que lhe permite extrair caracteres de uma string. Sua sintaxe é SUBSTRING(expression, start, length) Para o argumento expression, você escreve uma corda literal ou especifica uma coluna da qual você quer extrair o substrato. O argumento start é um número inteiro indicando a posição numérica do caractere na cadeia de caracteres onde começa o substrato. O argumento length, como o nome diz, define o comprimento, um valor inteiro, do substring a ser devolvido. Como funciona o SUBSTRING()? A dica está no próprio nome da função. Um substring é uma cadeia dentro da cadeia principal. Portanto, SUBSTRING() extrai um substring como você especifica em seu argumento. Funciona desta forma: Na string acima, o substrato que começa na posição 1 e tem um comprimento de três caracteres é ‘STR’. Agora que temos os princípios cobertos, deixe-me mostrar-lhe vários exemplos. Começando, é claro, com o mais simples! Exemplo 1: Substring From a String Literal A função SUBSTRING() retorna um substrato de qualquer corda que você desejar. Você pode escrever a corda explicitamente como um argumento, como este: SELECT SUBSTRING('This is the first substring example', 9, 10) AS substring_extraction; Isto significa: Quero encontrar um substrato a partir do texto ‘This is the first substring example’. Os argumentos dizem que o substring começa no 9º caracter da cadeia de caracteres e que seu comprimento é de 10 caracteres. Vamos ver o que este código retorna: substring_extraction the first Há uma coluna e uma linha. O substrato extraído é ‘the first’. Este é o uso mais básico do SUBSTRING(); o código não usa nem mesmo tabelas! A Tabela dos Funcionários Para mostrar-lhe exemplos mais interessantes, preciso de alguns dados. Deixe-me apresentá-lo a uma tabela chamada employees. A tabela armazena informações sobre os funcionários de uma empresa imaginária Kooler nas seguintes colunas: id - A identificação do funcionário. first_name - O primeiro nome do funcionário. last_name - O sobrenome do funcionário. email - O e-mail do funcionário. job_title - O cargo do funcionário. department - O departamento do funcionário. start_date - A data de início do funcionário em Kooler. Aqui estão as primeiras várias linhas para que você tenha uma noção dos dados: idfirst_namelast_nameemailjob_titledepartmentstart_date 1ClarenceWilkinsoncwilkinson@kooler.comJunior Sales AssistantSales09/2021 2MirandaBrownmbrown@kooler.comSenior Sales SpecialistSales01/2020 3FrankDrebinfdrebin@kooler.comJunior Sales ManagerSales08/2019 Exemplo 2: Substring From a Column Como você pode imaginar, escrever a expressão das cordas explicitamente não é a única maneira de usar SUBSTRING(). Você também pode utilizá-la em uma coluna de uma tabela. Aqui está um exemplo disso. Eu quero encontrar as iniciais de todos os funcionários. Uso a coluna email, pois sei que as duas primeiras letras do endereço de e-mail são as iniciais: SELECT first_name, last_name, email, SUBSTRING(email, 1, 2) AS employee_initials FROM employees; Eu especifico a coluna email na função. Obter as duas primeiras letras do endereço de e-mail significa que o substrato começa no primeiro caractere para um comprimento de dois caracteres. Isto retorna o resultado desejado: first_namelast_nameemailemployee_initials ClarenceWilkinsoncwilkinson@kooler.comcw MirandaBrownmbrown@kooler.commb FrankDrebinfdrebin@kooler.comfd VivienKellyvkelly@kooler.comvk SteveStephenssstephens@kooler.comss NastassjaHarrisonnharrison@kooler.comnh ThomasPetersontpeterson@kooler.comtp MathildeKinskimkinski@kooler.commk MateuszWozniakmwozniak@kooler.commw AineDoyleadoyle@kooler.comad LorenzoAlfieriaalfieri@kooler.comaa PetraBabićpbabic@kooler.compb DuarteSimoesdsimoes@kooler.comds OlenaKostenkookostenko@kooler.comok LaurensGrotenhuislgrotenhuis@kooler.comlg Exemplo 3: Substring Sem o Argumento de Comprimento Você pode omitir o argumento da duração em SUBSTRING(), e a função ainda funciona. Um bom exemplo é quando você quer mostrar apenas o ano da data de início do emprego. Veja, a coluna start_date é um pouco antipática para isso. Esta data é escrita como dados de texto no formato MM/AAAA. Felizmente, SUBSTRING() resolve este problema: SELECT first_name, last_name, start_date, SUBSTRING(start_date, 4) AS start_year FROM employees; Para obter o ano da coluna start_date, é suficiente definir o início do substrato. Neste código, o substring começa a partir do quarto caractere. Como eu omiti o argumento do comprimento, o comprimento do substring é longo até o final da cadeia a partir do quarto caractere. É assim que eu obtenho facilmente o ano, como você vê abaixo: first_namelast_namestart_datestart_year ClarenceWilkinson09/20212021 MirandaBrown01/20202020 FrankDrebin08/20192019 VivienKelly03/20192019 SteveStephens07/20212021 NastassjaHarrison03/20222022 ThomasPeterson01/20222022 MathildeKinski01/20222022 MateuszWozniak01/20222022 AineDoyle10/20212021 LorenzoAlfieri10/20212021 PetraBabić05/20212021 DuarteSimoes04/20202020 OlenaKostenko11/20192019 LaurensGrotenhuis06/20172017 Exemplo 4: POSITION() e CHARINDEX() Voltar ao trabalho com e-mails. Pela política da empresa, o ponto local de um endereço de e-mail (isto é, a parte antes de '@') também é o nome de usuário do funcionário para fazer login em todas as aplicações comerciais. Você precisa extrair este nome de usuário. Veja como: SELECT first_name, last_name, SUBSTRING (email, 1, POSITION('@' IN email)-1) AS username FROM employees; Os dois primeiros argumentos são os que você já viu. Quero extrair um substrato da coluna email, e quero que ele comece a partir do primeiro caractere da cadeia. Mas agora, o comprimento do substrato é diferente para cada funcionário. Como posso dizer à função para retornar todos os caracteres antes do sinal "@"? Eu uso POSITION(), que é equivalente a CHARINDEX() no SQL Server ou MySQL. Ele localiza o caractere especificado na string e retorna sua posição numérica de caracteres. Então, o comprimento do substrato que é o nome de usuário do funcionário é igual a POSITION('@' IN email)-1. Por que menos um? Porque não quero que '@' seja incluído no nome de usuário do funcionário. Este é o resultado: first_namelast_nameusername ClarenceWilkinsoncwilkinson MirandaBrownmbrown FrankDrebinfdrebin VivienKellyvkelly SteveStephenssstephens NastassjaHarrisonnharrison ThomasPetersontpeterson MathildeKinskimkinski MateuszWozniakmwozniak AineDoyleadoyle LorenzoAlfieriaalfieri PetraBabićpbabic DuarteSimoesdsimoes OlenaKostenkookostenko LaurensGrotenhuislgrotenhuis Exemplo 5: COMPRIMENTO() + POSIÇÃO() O exemplo final mostra como encontrar o cargo de um funcionário a partir dos dados. Trabalhando na Kooler, sei como são formados os títulos de emprego: primeiro vem a antiguidade do funcionário, depois o departamento, depois o cargo. Por exemplo, 'Assistente de Vendas Júnior' significa que o funcionário é de senioridade júnior, está em Vendas, e trabalha como assistente. Usando SQL, eu posso extrair isto como um substrato: SELECT first_name, last_name, job_title, SUBSTRING(job_title, LENGTH(job_title) - POSITION(' ' IN REVERSE(job_title))+2) AS position FROM employees; Este é outro exemplo de omitir o argumento da extensão, embora um pouco mais complexo. Como sempre, eu primeiro especifico a coluna de cordas - job_title neste caso. Depois disso, de alguma forma preciso encontrar um substring que consista apenas na última palavra no título do trabalho. Faço isto primeiro usando LENGTH(). Ele retorna o comprimento da cadeia de caracteres na coluna job_title. Isso é um começo; é o comprimento das três palavras juntas, incluindo os espaços em branco. Se eu pudesse de alguma forma subtrair dele o número de caracteres da última palavra, então eu teria o comprimento das duas primeiras palavras, o que me daria então o início do substrato que eu quero. Isto é um pouco complicado porque nomes de cargos diferentes têm comprimentos diferentes. A única coisa que separa as palavras é o espaço em branco. Portanto, para obter o comprimento da terceira palavra na cadeia, tenho que contar o número de caracteres até o espaço em branco, mas da direita. A função POSITION() salva o dia novamente, mas desta vez combinada com REVERSE(). A função REVERSE() inverte a expressão das cordas para que o 'Junior Sales Assistant' se torne o 'tnatsissA selaS roinuJ'. A última palavra se torna a primeira; a própria palavra também é invertida, mas isso não importa aqui. POSITION() encontra a posição do espaço em branco após a primeira palavra da corda invertida. Isto é igual ao lugar do espaço em branco antes da última palavra na cadeia original (não invertida). Phew! Agora, se eu subtrair este número do comprimento total da cadeia de caracteres original, eu tenho o início do substrato, certo? Bem, não exatamente! Usando esta diferença, pois ela produz um substring que inclui a última letra da segunda palavra e o espaço em branco antes da última palavra. Por que isso acontece? Duas coisas. O argumento inicial da função SUBSTRING() é inclusivo. Além disso, POSITION() calcula a posição do espaço em branco, não o número de caracteres até o espaço em branco. Portanto, tenho que adicionar 2 para obter este resultado: first_namelast_namejob_titleposition ClarenceWilkinsonJunior Sales AssistantAssistant MirandaBrownSenior Sales SpecialistSpecialist FrankDrebinJunior Sales ManagerManager VivienKellySenior Sales ManagerManager SteveStephensJunior Sales SpecialistSpecialist NastassjaHarrisonJunior Sales SpecialistSpecialist ThomasPetersonJunior Reporting SpecialistSpecialist MathildeKinskiJunior Reporting AnalystAnalyst MateuszWozniakSenior Reporting ExpertExpert AineDoyleJunior Reporting ManagerManager LorenzoAlfieriSenior Reporting ManagerManager PetraBabićJunior HR AssistantAssistant DuarteSimoesJunior HR AssistantAssistant OlenaKostenkoSenior HR AssistantAssistant LaurensGrotenhuisSenior HR ManagerManager Agora que introduzi algumas outras funções, você pode querer dar uma olhada em algumas outras funções de texto que podem ser úteis para você. Saiba mais sobre SUBSTRING () e trabalhar com dados de texto Agora você sabe quando e como usar SUBSTRING(). Chegou a hora de praticar! Existem outras funções de texto, não apenas SUBSTRING(). Você pode encontrá-las (e muito mais!) no Funções Comuns em SQL curso. até não ter certeza se o curso é para você? Aqui está uma descrição detalhada do que o curso cobre e como ele o ajuda. Tags: sql aprender sql text functions