Olá Galera, esses dias tive a necessidade de criar uma function no Oracle que me retornasse as iniciais de um nome, não cheguei a pesquisar para saber se já existia algo parecido e também não sei se o jeito que fiz é realmente o jeito mais fácil, porem achei que ficou bem simples!!
CREATE OR REPLACE FUNCTION OBTER_INICIAIS(P_NOME VARCHAR2)
RETURN VARCHAR2
IS
W_QT_INICIAIS
NUMBER(2);
W_POSICAO
NUMBER(2);
W_INICIAIS
VARCHAR2(10);
BEGIN
W_QT_INICIAIS
:= LENGTH(P_NOME) - LENGTH(REPLACE(P_NOME,' ',''));
W_INICIAIS
:= SUBSTR(P_NOME,1,1);
W_POSICAO
:= 1;
WHILE W_QT_INICIAIS >=
W_POSICAO
LOOP
W_INICIAIS := W_INICIAIS||SUBSTR(P_NOME,INSTR(P_NOME,' ',1,W_POSICAO)+1,1);
W_POSICAO := W_POSICAO +1;
END LOOP;
RETURN UPPER(W_INICIAIS);
END;
/
Explicando alguns trechos do código:
1) Identifico a quantidade de espaços existentes no nome, sendo a Quantidade de Caracteres menos(-) a quantidade de caracteres sem os espaços:
W_QT_INICIAIS := LENGTH(P_NOME) - LENGTH(REPLACE(P_NOME,' ',''));
2) Atribui na variável a primeira letra do nome como sendo a minha primeira inicial:
W_INICIAIS := SUBSTR(P_NOME,1,1);
3) Identifico a próxima letra inicial do nome. Nesse caso utilizei duas Funções nativa do Oracle, a função INSTR(Utilizei para identificar a posição dos espaços em branco) e SUBSTR(Utilizei para selecionar o próximo caracter após o espaço em branco):
W_INICIAIS := W_INICIAIS||SUBSTR(P_NOME,INSTR(P_NOME,' ',1,W_POSICAO)+1,1);
Testando a function:
Alisson, blz?
ResponderExcluirConsegueria passar essa função para SQL Server?
Por ex: A função LENGTH to SQL = LEN
INSTR seria = ?
Estou nessa situação, onde tenho que fazer uma Query em SQL server, onde a cada resultado de Nome, ele me traga todas as iniciais deste nome.
ExcluirEx: Luiz Almeida Candido
R: Luiz A. C.
Ex: Carlos Ferreira de Almeida Costa
R: Carlos F. A. C.
Entendeu?
Tentei vários tipos de soluções da internet, mas nenhume que me ajudasse com esse resultado. Desde já agradeço.
Consegui encontrar a função. Grato. Caso alguém precise, compartilho:
Excluir-------------------FUNÇÃO ABREVIAR NOMES ----------------------------
CREATE FUNCTION dbo.f_abreviar_nome(@value VARCHAR(MAX)) RETURNS VARCHAR(MAX)
AS BEGIN
DECLARE @firstName VARCHAR(50);
DECLARE @middleName VARCHAR(MAX);
DECLARE @aux VARCHAR(50);
DECLARE @fullName VARCHAR(50);
SET @firstName = LEFT(@value, CHARINDEX(' ', @value));
SET @middleName = '';
SET @aux = LTRIM(REPLACE(@value, @firstName,''));
SET @aux = LTRIM(REPLACE(@aux, 'da ',' '));
SET @aux = LTRIM(REPLACE(@aux, 'das ',' '));
SET @aux = LTRIM(REPLACE(@aux, 'de ',' '));
SET @aux = LTRIM(REPLACE(@aux, 'do ',' '));
SET @aux = LTRIM(REPLACE(@aux, 'dos ',' '));
WHILE (LEN(@aux) > 0)
BEGIN
SET @aux = LTRIM(@aux);
SET @middleName = @middleName + SUBSTRING(@aux, 1,1) + '. ';
IF (CHARINDEX(' ', @aux) > 0)
SET @aux = REPLACE(@aux, LEFT(@aux, CHARINDEX(' ', @aux)), '');
ELSE
SET @aux = '';
END
SET @fullName = @firstName + @middleName;
RETURN ( @fullName );
END
GO
-------------------FUNÇÃO ABREVIAR NOMES ---------------------------
Uso:
SELECT dbo.f_abreviar_nome (CAMPO), NOME * FROM TABELA