Ir para conteúdo
Fórum Script Brasil
  • 0

Problem Com Data


kartter

Pergunta

Problema com data

O problema é o seguinte::

estou migrando meu bd para interbase, e criei um campo "data", do tipo "timestamp".

Este tipo "timestamp", guarda dia e hora, portanto quando eu vou fazer um consulta sql, do tipo

select * from cadcli where data>=DateTimePicker1.asdatetime and data data<=DateTimePicker2.asdatetime

Supondo que o valor das variáveis seja:

data=15/11/2006;

DateTimePicker1.asdatetime=15/11/2006

DateTimePicker2.asdatetime=15/11/2006

O correto seria retornar o registro certo? Porém não está retornando. Suponho que seja pelo fato de que

pelo tipo do campo "data" ser timestamp, ele faz a comparação com a hora também. Gostaria de saber se tem

como, na consulta sql, eu pegar só a data da variável do tipo "timestamp" e não a data e a hora.

valeu!!!

Kartter

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá kartter,

Trabalhar com data sempre foi um problema mesmo, no caso faz o seguinte, crie duas variaveis do tipo string pra pegar essa data do DateTimePicker pra passar como parametro, e no caso de buscar ser por intervalode data você pode usar o comando BETWEEN.

var 
  datainicio, datafim : string;
begin
  datainicio := DateToStr(DateTimePicker1.Date);
  datafim := DateToStr(DateTimePicker2.Date);

  IBQuery.Close;
  IBQuery.Sql.Clear;
  IBQuery.Sql.Add('select * from cadcli where data between cast('+''''+datainicio+''''+' AS DATE) and cast('+''''+datafim+''''+' AS DATE)');
  IBQuery.Open;

Abs. Progr'amador.

B)

Link para o comentário
Compartilhar em outros sites

  • 0

Progr'amador, permita-me "fazer um parênteses" neste item.

Um cuidado que deve-se ter quando trabalhamos com campos que armazenam data e hora juntamente (como o TimeStamp), e justamente em situações como esta: você faz um filtro onde o campo deve encontrár-se entre duas datas e que neste caso é a mesma.

Bom, se está sendo armazenada a hora juntamente com a data, passar para esta consulta apenas a data, implica que o campo hora estará sendo referenciado com 00:00hs. Assim, para registros com o campo data contenha a data filtrada mas que tenha em sí um registro de hora diferente de 00:00hs não serão listados!

Ex. data = 15/11/2006 00:25 -> não será listado para a consulta no exemplo do colega kartter. E este pode ser também o problema que ele aponta.

Nestas condições, tendo em mente a questão da hora, é conveniente que seja concatenada a data, as referidas horas de início e fim do dia em questão:

Ex. DataInicio = 15/11/2006 e DataFim = 15/11/2006 23:59:59

kartter, você pode fazer uso da função DateTimeToTimeStamp(DateTime: TDateTime) - SysUtils, quando precisar fazer a conversão.

Particularmente, sou avesso a utilização do método de concatenação de variáveis para montar uma cláusula SQL. Prefiro a utilização de parâmetros. No caso especíifico de data, acho ainda mais interessante, já que existem diferentes formas de concatenar este tipo de campo para cada banco que você utiliza (ou seja não há um padrã). No Access por ex. você deve delimitar o texto da data utilizando o # (data between #15/11/2006#) em outros, a ordem mm/dd/aaaa é esperada. E assim vai. Quando você utiliza parâmetros, esta "preocupação" fica por conta do drive que acessa o banco. Dá uma olhada neste outro post se tiver enteresse.

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...