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.
davy.ai
Puede intentar utilizar el siguiente código para obtener la salida deseada: