Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2017
solilopi solilopi is offline
Registrado
NULL
 
Registrado: sep 2017
Posts: 6
Poder: 0
solilopi Va por buen camino
Exclamation Convertir función MySql a procedimiento Firebird

Hola, tengo una función en una Bd MySql y estoy intentando convertirla a procedimiento de Firebird. No puedo con ella. Podéis echarme un cable?. Gracias.
Código:
CREATE DEFINER=`root`@`localhost` FUNCTION `dias_sin`() RETURNS smallint(6)
BEGIN
 
DECLARE resultado SMALLINT DEFAULT 0;
 
  SELECT MAX(DATEDIFF(dt1.fecha, dt2.fecha)) INTO resultado FROM datos dt1
    INNER JOIN datos dt2 ON dt1.salida_num = dt2.salida_num + 1;
     
RETURN resultado;
 
END
Responder Con Cita
  #2  
Antiguo 02-09-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No somos adivinos, no sabemos qué son exactamente esos campos, se supone que devuelve la diferencia entre dos fechas, pero para eso no hace falta crear ningún procedimiento.
Responder Con Cita
  #3  
Antiguo 03-09-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
, pero para eso no hace falta crear ningún procedimiento.
Estoy de acuerdo con lo que dice Casimiro.
En todo caso, lo único que deberías tener en cuenta és la utilización diferente en fitebird de la función DATEDIFF

DATEDIFF(<unidad> FROM <momento1> TO <momento2>)

En tu caso sería

Código SQL [-]
DATEDIFF(DAY FROM dt1.fecha TO dt2.fecha)
Responder Con Cita
  #4  
Antiguo 03-09-2017
solilopi solilopi is offline
Registrado
NULL
 
Registrado: sep 2017
Posts: 6
Poder: 0
solilopi Va por buen camino
Exclamation

Cita:
Empezado por Casimiro Notevi Ver Mensaje
No somos adivinos, no sabemos qué son exactamente esos campos, se supone que devuelve la diferencia entre dos fechas, pero para eso no hace falta crear ningún procedimiento.
Hola de nuevo, lo siento, con las prisas y el cansancio no me expliqué. Tengo que recorrer una tabla y extraer la mayor diferencia entre dos fechas consecutivas.

La función lo que hace es comparar una fecha con su anterior y devuelve la mayor diferencia entre dos fechas:
Código:
 
CREATE DEFINER=`root`@`localhost` FUNCTION `dias_sin`() RETURNS smallint(6)
BEGIN
 
DECLARE resultado SMALLINT DEFAULT 0;
 
  SELECT MAX(DATEDIFF(dt1.fecha, dt2.fecha)) INTO resultado FROM datos dt1
    INNER JOIN datos dt2 ON dt1.salida_num = dt2.salida_num + 1;
     
RETURN resultado;
 
END
Espero que os lo haya aclarado más, y siento el malentendido. Saludos.
Responder Con Cita
  #5  
Antiguo 03-09-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Podrías probar algo similar a esto:
Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_MAXDIF 
RETURNS(
  RESULT INTEGER)
AS
  DECLARE VARIABLE MAXDIF INTEGER;
BEGIN
  AUX    = 0;
  RESULT = 0;
  FOR
    SELECT DATEDIFF(DAY FROM DT1.FECHA TO DT1.FECHA)
  FROM DATOS DT1, DATOS DT2
  WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1 
    INTO AUX
  DO
    IF(AUX > RESULT) THEN RESULT = AUX;
  SUSPEND;
END^

SET TERM ; ^
De acuerdo a tu código infiero que la columna SALIDA_NUM es numérica ascendente y consecutiva, de otro modo no funcionará el algorítmo.

Algo que no especificas es la unidad en que deseas obtener la diferencia. manelb ya te hizo esa observación y te especificó el formato de la sintáxis en su mensaje.

Mas información sobre la función: DATEDIFF()

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 04-09-2017
solilopi solilopi is offline
Registrado
NULL
 
Registrado: sep 2017
Posts: 6
Poder: 0
solilopi Va por buen camino
En primer lugar perdon por no haberme explicado correctamente y en segundo lugar muchas gracias por vuestro tiempo. La función devuelve un entero que es el número de días que hay de diferencia máxima entre dos fechas consecutivas. Repito muchas gracias y disculpad por mi error. Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
funcion para convertir un numero en letras dardusso23 Varios 5 28-10-2016 23:20:52
Convertir números a letras por medio de una función recursiva nlsgarcia Trucos 17 22-07-2015 04:43:03
Funcion IN en Procedimiento Almacenado mjjj SQL 8 03-10-2012 17:56:29
asigarnar tecla a un procedimiento o funcion douglas OOP 4 21-10-2007 02:17:26
Creando funcion o procedimiento almacenado buffygcs MS SQL Server 3 05-05-2005 10:44:56


La franja horaria es GMT +2. Ahora son las 20:43:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi