FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
duda sobre un select (sql)
Hola, me gustaria saber como puedo realizar un select que me interesa.
Tengo un campo del tipo Timestamp y necesito que me filtre los registros y solo me muestre los que tengan la fecha > que la del dia de hoy. He intentado un "select * from tabla where FECHA >'+(date)+'order by NOMBRE", pero me da un error de conversion. La verdad es que no se muy bien como atacar el asunto. Espero un poco de luz Un saludo. |
#2
|
|||
|
|||
prueba con esto:
'select * from tabla where fecha> '+quotedstr(texto del control de fecha)+' order by NAME' |
#3
|
||||
|
||||
Además de lo que dice Nelet y de lo que cadetill dirá en un momento asegúrate de que la fecha la das en el formato correcto, dd//mm/aaaa ó mm/dd/aaaa, etc. según la base de datos que utilices.
// Saludos Última edición por roman fecha: 10-12-2003 a las 18:47:53. |
#4
|
|||
|
|||
Es que el problema me viene precisamente de ahi, si le meto la fecha en la consulta en forma de string, luego no me encuentra nada ya que el campo es del tipo timestamp...
La verdad es que estoy un poco perdido |
#5
|
|||
|
|||
debes hacer un casteo
Código:
'select * from tabla where cast(fecha as date) > '+quotedstr(fecha)+' order by NAME' |
#6
|
||||
|
||||
Otra opción muy común es usar parámetros, y de esta manera te olvidas del problema de conversiones, ya que son pasados al servidor como parametros tipados.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
|||
|
|||
Como dice Cadetill tienes que utilizar un cast pero creo que no es donde dice el sino que que quedaría así:
'select * from tabla where fecha>cast('+quotedstr(texto del control de fecha)+' as datetime) order by NAME' El datetime se utliza en sql-server, si utilizas otro SGBD podría ser de otra forma. ____________________ Folleu..folleu...que el mon s'acaba ____________________ |
#8
|
|||
|
|||
Hola Nelet
Creo que lo que buscaba el amigo acrophet es sacar todos los registros de una fecha dada (ej.: 10/01/2003). Si tu casteas a DateTime la fecha que pasan por parámetro, el resultado del casteo sería algo así '10/01/2003 00:00:00', por lo que sólo te cogerá los registros que coincidan con ese día/hora. De ahí el casteo al campo de la tabla a formato Date (que almenos en IB/FB devuelve sólo la fecha, sin la hora) |
#9
|
|||
|
|||
La verdad es que hoy estoy un poco espesito a estas horas de la mañana.
Cadetill te daría toda la razón si la condición de la select fuera que campofecha=textofecha, pero creo que siendo la condición campofecha>textofecha (que pienso que es lo que busca acrophet) no importa que esté incluida la hora. Por lo menos en sql-server o access o paradox a mi nunca me ha dado ningún problema al filtrar por rangos de fechas, aunque unos datos incluyan la hora y otros no. Y el cast lo meto ahí, pq según acrophet el problema le viene al pasar el contenido del control a la select, aunque no se que BD utlizará el (acrophet, hombre, haz el favor de decirnos que BD utilizas), pq con sql-server la select funciona perfectamente con el quotedstr y sin ningún cast. _________________________ El mon s'acabat, ja no teniu temps de res _________________________ |
#10
|
|||
|
|||
Cita:
PD: no se quién de los dos está más espesito por la mañana |
#11
|
|||
|
|||
Bueno, al final no he utilizado lo que me habeis puesto , pero me ha ayudado a conseguir lo que buscaba.
Por cierto, utilizo interbase :P Teniamos varios problemas, que se han comentado por ahi; el tipo de fecha estaba en el formato dd/mm/aaaa hh:mm:ss. A mi solo me interesaba la fecha, no la hora. para pasarle la fecha en sql, tenemos que cambiarlo al formato mm/dd/aaaa. Pues bien, para empezar me cree un funcion que me convertia la fecha al formato que necesitaba. Una vez teniendo esto, aun quedaba el problema de la hora(que no me interesa), pues bien, usando una variable del tipo TDateTime me guardo la fecha de hoy (usando date). Luego echando mano de la funcion int, nos cepillamos la parte decimal del numero(justamente la hora) y guardamos la que nos interesa. Una vez tenemos esto, simplemente hay que poner la sentencia sql correspondiente: 'select * from tabla where HORA >='+quotedstr(cambiafecha(datetostr(hoy)))+'order by NOMBRE' Donde cambiafecha es la funcion que convierte los formatos de fecha y hoy es la variable TDateTime donde ya tenemos solamente la fecha y no la hora guardada. Al final nada de casteos ni nada :P Un saludo y gracias a todos!! y si a alguien le interesa, pues ya tiene la idea ahi puesta. |
#12
|
|||
|
|||
Cambio de formato de fecha
Hola!
oye perdon pero como cambiaste el formato de la fecha tengo el mismo problema ke tu. gracias. |
#13
|
||||
|
||||
Bienvenido a clubDelphi gerasA
Te invito a leer la guía de estilo que rige estos foros (te ahorrará confusiones y problemas ). En cuanto a tu duda, usa parámetros en el SQL y que delphi se las arregle con tu motor de bases de datos:
El uso de "Trunc" es para quitar la porción de hora. Como sabrás, el tipo TDateTime es un número real, la parte entera expresa los días que han pasado desde el calendario base (31/12/1899) hasta hoy. La parte fraccionaria, corresponde a los milisegundos que han pasado desde la media noche. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#14
|
|||
|
|||
Hola!
Lo que pasa es que la fecha la captura el usuario en un edit y lo que quiero es que cambie el formato de la fecha mm/dd/aaaa a dd/mm/aaaa pero no utilizo el datetimepicker, solo quiero saber como hacer la conversión. Esto es lo que yo hago para hacer la busqueda: Pero tendria que capturarse en el formato mm/dd/aaaa y yo quiero que lo capture en el formato dd/mm/aaaa. Gracias |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|