Iniciais de um nome completo - SQL SERVER [RESOLVIDO]

Gostaria de saber como faço para criar um query ou função que me traga as inicias do nome completo.
Ex: Luiz Almeida Candido
R: Luiz A. C.

Ex: Carlos Ferreira de Almeida Costa
R: Carlos F. A. C.

Consegui até agora isso:
NOME

LEFT(NOME, CharIndex(' ', NOME) - 1) AS FIRSTNAME,
REPLACE(REPLACE(NOME, REVERSE(LEFT(REVERSE(NOME), CHARINDEX(' ', REVERSE(NOME)) - 1)), ''), LEFT(NOME, CharIndex(' ', NOME) - 1), '') AS MIDNAME,-->**Nessa parte aqui que é o problema... tenho que pegar as iniciais que aparece aqui.**
      LEFT ( REVERSE(LEFT(REVERSE(NOME), CHARINDEX(' ', REVERSE(NOME)) - 1)), 1) AS LASTNAME,
LEN(NOME) - LEN(REPLACE(NOME,' ','')) AS QTD_SPACE

Segue resultado:

|Nome                  |FirstName|MidName|LastName|qt_space_nome|
|AGUEDA MIRANDA ALVES  |AGUEDA   |MIRANDA|    A   |     2       |
|Nome                            |FirstName|MidName             |LastName|qt_space_nome|
|AHMAD SOBHI MUHIEDDINE EL KHAWLI|AHMAD    | SOBHI MUHIEDDINE EL|     K  |     4  |
|Nome              |FirstName|MidName |LastName|qt_space_nome|
|ILDA FONSECA ROCHA|    ILDA | FONSECA|     R  |      2      |
|Nome                            |FirstName|     MidName            |LastName|qt_space_nome|
|ANA MARIA PIMENTA RIBEIRO DA LUZ|   ANA   |MARIA PIMENTA RIBEIRO DA|    L   |   5  |
|Nome               |FirstName|MidName |LastName|qt_space_nome|
|ANDRE SANTIAGO LIMA|ANDRE    |SANTIAGO|    L   |        2    |

Crie uma função:

ALTER FUNCTION dbo.Fn_Abbreviate(@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

Depois utilize na sua SQL:

select dbo.Fn_Abbreviate(name), name from Names
1 curtida

Vou tentar agora.

Dragoon,

Sensacional… meu Parabéns pela excelente eficiência. Era isso mesmo que eu queria. Deu certinho. Nada na internet chegou perto disso que me passou.

Vlw mesmo… Me ajudou muito na minha query final…

Parabéns novamente.

2 curtidas