Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días,
estoy desarrollando un script en el que se puedan hacer recargas parciales de una base de datos.
Ya lo he desarrollado otras veces por lo que tengo clara la dinámica de funcionamiento, sin embargo en este caso estoy teniendo errores con el tipo de datos SQL. La única pega es que las veces que lo he utilizado, la variable FECHA sobre la que trabajaba era de tipo datetime y en este caso la variable FECHA es de tipo date.
En primer caso leo la fecha máxima de la base de datos:
Lectura del valor más reciente de la base de datos. |
---|
Fecha_maxima_tmp: LOAD Max(FECHA) as FECHA FROM METEO_HCO_VALORES.qvd (qvd); |
Y me lo guardo en una variable quitando 7 días(esto es un truco que tuve que inventar ya que los datos de los últimos 7 días pueden ir variando):
Variable vMaxFecha - Caso 1 |
---|
LET vMaxFecha = ((Round(Peek('FECHA',0,'Fecha_maxima_tmp')))-7); |
Consulta a la base de datos de los datos de esos últimos 7 días:
Consulta - Caso 1 |
---|
METEO_HCO_VALORES: LOAD FECHA as FECHA, Year(FECHA) as año, Month(FECHA) as mes, Day(FECHA) as dia, VALOR; SQL SELECT * FROM AREAMA."AMA_METEO_HCO_VALORES" WHERE FECHA > ($(vMaxFecha)); |
Aquí ya me encuentro el siguiente error:
Al ver ese error se me ocurre cambiar la Variable vMaxFecha:
Variable vMaxFecha - Caso 2 |
---|
LET vMaxFecha = date((Round(Peek('FECHA',0,'Fecha_maxima_tmp')))-7); |
y dejar la consulta igual que en el Caso 1 pero me encuentro con el mismo error.
Al ver ese error busco otra solución y es dejando la variable vMaxFecha como el Caso 1 y cambiando la consulta a :
Consulta - Caso 3 |
---|
METEO_HCO_VALORES: LOAD FECHA as FECHA, Year(FECHA) as año, Month(FECHA) as mes, Day(FECHA) as dia, VALOR; SQL SELECT * FROM AREAMA."AMA_METEO_HCO_VALORES" WHERE FECHA > to_date($(vMaxFecha)); |
Me encuentro el error:
Y ya por último pruebo el script como la variable vMaxFecha como el caso 2 y la consulta como el caso 3 y me encuentro el error:
Quería saber si alguien podría ayudarme.
Gracias!
La respuesta correcta gracias a sorrakis01y a joaquinlres esta:
LET vFechaMax = chr(39)& Date(Today(), 'YYYY/MM/DD') & chr(39);
SELECT *
FROM Tabla
Where FECHA > $(vFechaMax);
Hola Carlos:
Contra una BBDD Oracle este where me funciona, hoy vCAMh = 20160630
WHERE FECHA > $(vCAMh)
AND (FECHA > 20130303 AND EMP = 'XXXX' )
Aquí compruebo una fecha formato TimeStamp contra una variable cuyo valor es '2016/08/24' contra MySQL
WHERE Date(t.RECORDDATE) <= $(vFechaMax)
Para convertir algunas fechas en formato timestamp a fecha tienes que usar la función MAKEDATE
Saludos
Joaquín
Hola Joaquín, gracias por interesarte en el tema.
Con variables fecha en formato TimeStamp o Datetime lo he conseguido pero se me sigue resitiendo porque en este caso en la BBDD el campo FECHA es Date. He probado a convertir la variable FECHA en el where pero no lo he conseguido, además no tengo muy claro que eso se pueda hacer así.
Gracias de todas formas.
Un saludo
Hola Carlos,
Una duda, si tu pruebas la última query en el SQL te funciona?
Es decir: SELECT *
FROM Tabla
Where FECHA > toDate(17/08/2016)
Esto te funciona?
Saludos,
Hola Carlos:
La variable que muestras tiene valor 42599, es importante que tanto tu variable como tu campo de BBDD tengan el mismo formato numérico o de fecha, si además es tipo date es importante el orden de los campos YYYY/MM/DD o DD/MM/YYYY.
Si general el log de la recarga, busca la sentencia SQL con las variables expandidas y la copias; con eso quizá veamos más claro el problema.
Saludos
Joaquín
Hola Jordi,
He probado y me da error con identificador no válido. Cuando probé:
SELECT *
FROM Tabla
Where FECHA > to_Date(17/08/2016)
decía que se ha encontrado un carácter no númerico donde se esperaba uno númerico
Hola Carlos,
Entonces el problema lo tienes en la query no? es decir el campo FECHA en tus datos como es?
dd/mm/yyyy hh:mm:ss?
Que pasa si pruebas esto:
SELECT *
FROM Tabla
Where FECHA > 17/08/2016
o esto:
SELECT *
FROM Tabla
Where FECHA > '17/08/2016'
Si usas el to_date, si no me equivoco es para pasar un string a fecha pero para ello te falta indicarle el formato y que la fecha sea string, es decir to_date(''20160817','YYYYMMDD')
Saludos,
Hola Joaquín,
ya tengo claro lo de los formatos en que la BBDD tiene que coincidir con el de la variable. La columna de la BBDD es de tipo date pero tiene el siguiente formato: "DD/MM/AAAA hh:mm:ss"
Aquí te paso las sentencias SQL del log:
2016-08-30 08:54:24 0073 Fecha_maxima_tmp:
2016-08-30 08:54:24 0074 LOAD Max(FECHA) as FECHA
2016-08-30 08:54:24 0075 FROM METEO_HCO_VALORES.qvd (qvd)
2016-08-30 08:54:30 1 campos encontrados: FECHA,
2016-08-30 08:54:30 1 registros leídos
2016-08-30 08:54:30 0080 LET vMaxFecha = Peek('FECHA',0,'Fecha_maxima_tmp')
2016-08-30 08:54:30 0100 SQL SELECT *
2016-08-30 08:54:30 0101 FROM AREAMA."AMA_METEO_HCO_VALORES"
2016-08-30 08:54:30 0102 Where FECHA > to_Date(24/08/2016 0:00:00)
2016-08-30 08:54:31 Error: SQL##f - SqlState: S1000, ErrorCode: 907, ErrorMsg: [Oracle][ODBC][Ora]ORA-00907: falta el paréntesis derecho
Saludos,
Carlos
Hola Carlos
SELECT *
FROM Tabla
Where ToDate(FECHA) > '17/08/2016'
Saludos
Joaquín
Hola Jordi,
utilizando esta consulta si que funciona correctamente.
SELECT *
FROM Tabla
Where FECHA > '17/08/2016'
Habría alguna forma de comparar la FECHA con una variable en vez de poner '17/08/2016'?
Gracias