es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtén las primeras letras de las palabras en SQL.

Estoy buscando obtener algunas letras en una cadena de palabras. Debe ser los primeros 5 caracteres (si hay más de 5, de lo contrario, toda la palabra y los primeros caracteres subsiguientes de las próximas palabras 5+1(+1…))

Por ejemplo, Cuenta Clave de ventas
Me gustaría obtener solo “CuentCV” o HR General – HRG

Actualmente estoy usando esto:

ALTER FUNCTION [dbo].[fnFirsties5]
(
@str NVARCHAR(4000)
)
RETURNS NVARCHAR(2000)
AS
BEGIN
DECLARE @retval NVARCHAR(2000);

SET @str=RTRIM(LTRIM(@str));
SET @retval=LEFT(@str,5);

WHILE CHARINDEX(' ',@str,1) > 0 BEGIN
    SET @str=LTRIM(RIGHT(@str,LEN(@str)-CHARINDEX(' ',@str,1)));
    SET @retval+=LEFT(@str,1);
END

RETURN @retval;

END

pero esto da un resultado como “Cuent CV” o “HR GeG”

Algunas cosas más a tener en cuenta:

Versión: Microsoft SQL Server 2008 R2 (SP3-GDR) (KB4057113) –
10.50.6560.0 (X64) Dec 28 2017 15:03:48 Copyright (c) Microsoft Corporation Standard Edition (64-bit) en Windows NT 6.0 (Build
6002: Service Pack 2) (Hypervisor)

Actualmente, esto es lo que obtengo:

ID Empleado Nombre Familia de trabajo Descripción
123 John Smith Cuent CV Cuenta Clave de ventas
124 karen Smith HR GeG Recursos humanos general
213 John Doe ProdOp Operador de producción

Lo que espero:

ID Empleado Nombre Familia de trabajo Descripción
123 John Smith Cuent CV Cuenta Clave de ventas
124 karen Smith HR G Recursos humanos general
213 John Doe ProduO Operador de producción

El código que estoy usando actualmente es:

ALTER FUNCTION [dbo].[fnFirsties5] ( @str NVARCHAR(4000) )
RETURNS NVARCHAR(2000)
AS
BEGIN
DECLARE @retval NVARCHAR(2000);

SET @str=RTRIM(LTRIM(@str));
SET @retval=LEFT(@str,5);

WHILE CHARINDEX(' ',@str,1)>0 BEGIN
    SET @str=LTRIM(RIGHT(@str,LEN(@str)-CHARINDEX(' ',@str,1)));
    SET @retval+=LEFT(@str,1);
END

RETURN @retval;

END

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede intentar utilizar el siguiente código para obtener la salida deseada:

    ALTER FUNCTION [dbo].[fnFirsties5] ( @str NVARCHAR(4000) )
    RETURNS NVARCHAR(2000)
    AS
    BEGIN
        DECLARE @retval NVARCHAR(2000);
    
        SET @str=RTRIM(LTRIM(@str));
        SET @retval=LEFT(@str,5);
    
        WHILE CHARINDEX(' ',@str,1)>0 BEGIN
            SET @str=LTRIM(RIGHT(@str,LEN(@str)-CHARINDEX(' ',@str,1)));
            IF LEN(@str) >= 5
            BEGIN
                SET @retval+=LEFT(@str,1);
            END
        END
    
        RETURN @retval;
    END
    

Comments are closed.