Você tem um campo string onde guarda o nome completo e precisa escrever uma consulta que traga apenas o primeiro nome.
Eu cheguei ao resultado abaixo, não conseguindo uma consulta que funcionasse ao mesmo tempo com Firebird e SQL Server.
Firebird
SELECT IIF(POSITION(‘ ‘ IN NOME_COMPLETO) > 0, SUBSTRING(NOME_COMPLETO FROM 1 FOR POSITION(‘ ‘ IN NOME_COMPLETO) – 1), NOME_COMPLETO) FROM TABELA
SQL Server
SELECT CASE WHEN CHARINDEX(' ', NOME_COMPLETO) > 0 THEN SUBSTRING(NOME_COMPLETO, 1, CHARINDEX(' ', NOME_COMPLETO) - 1) ELSE NOME_COMPLETO END FROM TABELA
Qualquer idéia melhor é bem-vinda.
UPDATE: Baseado no feedback recebido, refatorei a consulta, veja aqui a versão 2.
TPodcast
9 Comments
Realmente muito bom, era tudo o que eu precisava =D
MS SQL Server
select top 10
substring( Nome, 1, charindex(‘ ‘, Nome + ‘ ‘ ) )
from Pessoa
Não acha mais simples somar um espaço no Nome na hora de terminar a posição final, ao invés de executar duas vezes a charIndex no caso de Existir um espaço, fora o tempo de executar os “case when …” tbem.
MS SQL Server
select top 10
left( Nome, charindex(‘ ‘, Nome + ‘ ‘ ) )
from Pessoa
Podem usar o left tbem no lugar do substring.
Erick no caso do SQL Server você pode reduzir um pouco seu comando deixando da seguinte forma:
SELECT ISNULL(SUBSTRING(NOME_COMPLETO,1,CHARINDEX(‘ ‘, NOME_COMPLETO)-1),NOME_COMPLETO) FROM TABELA
Abraço,
Diego Garcia
Só para adicionar ao conteudo, eu precisei de algo esses dias no PostgreSQL e fiz algo assim:
SELECT SPLIT_PART(NOME_COMPLETO, ‘ ‘, 1) FROM TABELA
No MySQL uso assim: select substring_index(nome_completo, ‘ ‘, 1)
Erick corrigindo para conseguir o resultado esperado sem utilizar o case when que você utilizou seria assim:
SELECT ISNULL(NULLIF(SUBSTRING(NOME_COMPLETO,1,CHARINDEX(‘ ‘, NOME_COMPLETO)-1),”),NOME_COMPLETO) FROM TABELA
Tinha esquecido que o substring só retorna NULL caso a coluna esteja com NULL, se não encontrar retorna uma string vazia ”, então se for vazia convertemos para NULL.
O ideal seria mediar a performance para ver qual forma fica mais rápida.
Abraço,
Diego Garcia
Com certeza ótima idéia adicionar o espaço no final! Obrigado.
Pingback: Extrair primeiro nome usando SQL v2.0 | Erick Sasse