SQL - Funcion en SQL SERVER

   
Vista:

Funcion en SQL SERVER

Publicado por miguel miguel.9.5.1994@gmail.com (5 intervenciones) el 24/06/2015 13:16:21
Hola estoi intentando crear una funcion donde le pase un texto y el me devuelva las N_Palabras que le indique.

Por ejemplo: Los alumnos del instituto son geniales.

Pues la funcion me tiene que devolver Los Alumnos si le pusiera 2 en N_Palabras,

he puesto como parametros de entrada el text con un varchar(max) y N_palabras como int, pero no consigo seguir ya que no encuentro ninguna solucion

espero que alguien pueda ayudarme graciaaas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Funcion en SQL SERVER

Publicado por Rafael (83 intervenciones) el 24/06/2015 13:42:54
vaya no consigues seguir ??
Puedes poner lo que llevas para retomar de ahi y ver si te podemos ayudar a terminar???

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion en SQL SERVER

Publicado por miguel miguel.9.5.1994@gmail.com (5 intervenciones) el 25/06/2015 08:11:29
Hola, me quede aqui,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ALTER FUNCTION FN_PRIMERAS_N_PALABRAS_CADENA
(
	@TEXTO		VARCHAR(max),
	@N_PALABRAS	int
)
RETURNS VARCHAR(max)
AS
	begin
		declare @Cont int
		declare @posicion int
		declare @resultado varchar(max)
		set @cont = 0
		set @posicion = 0
		set @resultado = " "
 
		while @cont < @N_PALABRAS
			begin
			set @posicion= CHARINDEX(@texto,0,@posicion+1)
 
 
			end
	end
 
RETURN


estaba intentando que me reconodca los espacion en blanco y con un bucle que me vaya sacando las cosas, nose si la idea estara bn pero no se como seguir :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion en SQL SERVER

Publicado por Rafael (83 intervenciones) el 25/06/2015 10:35:18
Bueno alguna idea tenias... pero algo vaga:

Te cuento
1. Te faltan ; al final de las sentencias que lo requieren
2. Tienes algunos errores de sintaxis...

Espero te sirva esto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
CREATE FUNCTION dbo.FN_PRIMERAS_N (
    @TEXTO  varchar(500)
  , @N_PALABRAS int
)
RETURNS varchar(500)
AS
BEGIN
    DECLARE @CONT int,
            @POSICION int,
            @NUEVAPOSICION int,
            @RESULTADO varchar(500),
            @DATO varchar(1000);
 
    SET @CONT = 0;
    SET @POSICION = 1;
    SET @RESULTADO = '';
    SET @DATO = '';
 
    WHILE @CONT < @N_PALABRAS
    BEGIN
        SET @NUEVAPOSICION = CHARINDEX(' ', @TEXTO, @POSICION);
        IF @NUEVAPOSICION > 0
        BEGIN
            SET @CONT = @CONT + 1;
            SET @POSICION = @NUEVAPOSICION+1;
        END;
        IF @NUEVAPOSICION=0
        BEGIN
            SET @CONT=@N_PALABRAS;
        END;
    END;
    SET @RESULTADO = SUBSTRING(@TEXTO, 1, @POSICION-1);
 
    RETURN (@RESULTADO);
END;
GO


Para ejecutarla:
1
2
3
SELECT dbo.FN_PRIMERAS_N('Algo para el foro de la Web del Programador', 2)
     , dbo.FN_PRIMERAS_N('Algo para el foro de la Web del Programador', 4)
     , dbo.FN_PRIMERAS_N('Algo para el foro de la Web del Programador', 1);

El resultado...
Query
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Funcion en SQL SERVER

Publicado por miguel (5 intervenciones) el 25/06/2015 12:43:56
Muchisimas gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion en SQL SERVER

Publicado por Rafael (83 intervenciones) el 25/06/2015 12:53:22
Una calificacion no estaria de menos... saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion en SQL SERVER

Publicado por leonardo_josue (878 intervenciones) el 25/06/2015 19:19:32
Hola a todos:

Dice el dicho: "Dale un pez a un hombre y comerá un día; enséñale a pescar y comerá siempre". Lo que plantea Rafael es correcto, aunque en lugar de que te hubiera puesto la solución (bueno, salvo un pequeño detalle que comentaré al final) lo correcto era ayudarte a que obtuvieras la respuesta por tu cuenta.

La idea creo que la tienes clara, los pasos que puedes seguir para hacer lo que quieres sería:

1. Encontrar la primera aparición de un espacio en blanco, esto equivaldría a una palabra.
2. "Copiar" esta palabra y concatenarla a tu cadena resultante.
3. incrementar el contador de palabras encontradas
4. Verificar
SI las palabras encontradas es igual al numero de palabras solicitadas
ENTONCES terminas
SINO Buscar la siguiente palabra (Ir al paso 1)

Aquí hay muchas formas de hacer las cosas... por ejemplo, Rafael va cambiando de posición inicial en el SUBSTRING... otra manera sería ir RECORTANDO la cadena original y siempre buscar desde el inicio...

Sería un muy buen ejercicio que trataras de hacer este ejercicio con tu propia lógica.

Ahora bien, hay algunas consideraciones que debes tener si quieres un ejercicio completo:

1. ¿Qué debe ocurrir si el número de palabras solicitadas es mayor al número de palabras en la frase a buscar? o lo que es lo mismo, n es mayor al número de espacios en la frase... Aquí depende de tu lógica de negocio, puedes marcar un error o simplemente devuelves la cadena original.

2. ¿Qué pasa si la cadena original no contiene espacios? es decir, es una sola palabra... Lo mismo, debes decidir qué debe hacer tu función.

Estos dos casos no los considera Rafael en su ejercicio... haz la prueba y observa cuál es el el resultado y a partir de eso, puedes decidir qué tienes que hacer para corregir el ejercicio.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar