PostgreSQL - Funcion martes13

 
Vista:

Funcion martes13

Publicado por Return98 (1 intervención) el 10/06/2021 09:49:48
Hola muy buenas, estoy repasando las funciones pero no consigo resolver esta;

Escribe una función que devuelva todos los martes 13 a partir de un año especifico.

Ejemplo:

Select * from martes13(2018);

13/02/2018
13/03/2018
13/11/2018

No hay forma de resolverla por muy simple que parezca, entiendo que tengo que usar intervalos, dates y todo pero no me sale.
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
sin imagen de perfil
Val: 15
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Funcion martes13

Publicado por Hugo (8 intervenciones) el 14/06/2021 16:19:15
Esta función resuelve lo que buscas

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
37
38
CREATE OR REPLACE  FUNCTION  martes13( _year integer)
    	RETURNS TABLE (fecha date) AS
    $BODY$
    DECLARE
	_cont integer=1;
	_fecha date;
	_dow text;
	_dia_buscado text='tuesday';-- día de la semana que queremos conocer
 
    BEGIN
	create temp table _martes (fecha date); -- tabla temporal para guardar los resultados positivos
 
	loop
	_fecha=cast('13/'||_cont||'/'||_year as date); -- armado de la fecha a evaluar sabemos que dos parametros son fijos, dia y año
	_dow= trim((select to_char(_fecha, 'day'))); -- calculo del dia de la semana  de la fecha a consultar el resultado lo da en ingles
 
 
		if (_dow=_dia_buscado) -- comparación entre el día que buscamos y el día de la semana del 13 de cada mes
		then
		insert into _martes (fecha) values (_fecha); -- almacenamiento del resultado positivo
		end if;
 
		if _cont=12 -- los doce meses del año en el mes 13 se sale
		then
		EXIT;
		else
		_cont=_cont+1;
		end if;
	end loop;
 
	return QUERY
	select m.fecha from _martes m;
 
	drop table _martes; -- eliminamos la tabla temporal
 
	END;
    $BODY$
    LANGUAGE plpgsql VOLATILE;
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
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Funcion martes13

Publicado por Francisco (110 intervenciones) el 23/06/2021 21:15:19
Hola

Muy rebuscado, esto es mas simple

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION martes13(miAnno int)
RETURNS TABLE (fecha date)
AS
$$
DECLARE
  miFecha timestamp;
  miMes int;
BEGIN
  FOR miMes IN 1..12
  LOOP
    fecha = make_date(miAnno, miMes, 13);
    -- El día de la semana van desde Domingo(0) a Sábado (6)
    -- Martes corresponde a 2
    RAISE INFO '% - %', fecha, EXTRACT(DOW FROM fecha);
    IF EXTRACT(DOW FROM fecha) = 2 THEN
      RETURN NEXT;
    END IF;
  END LOOP;
END
$$
LANGUAGE plpgsql;
 
SELECT martes13(2018);
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