Não consigo obter resultados confiáveis da consulta em um banco de dados sqlite usando uma string datetime como uma comparação:
select *
from table_1
where mydate >= '1/1/2009' and mydate <= '5/5/2009'
como devo lidar com as comparações de data e hora com sqlite?
update: o campo mydate é um tipo de dados DateTime
mydate
coluna? Suponho que não seja um dos formatos suportados pelo SQLite: sqlite.org/lang_datefunc.html'2009-11-13'
, para minha data, será menor que'2009-11-13 00:00:00'
.)Datetime()
exatamente como @Brad incluiu em sua menção à solução. Caso contrário, o VS2012 reclama. Obrigado Brad.Respostas:
SQLite não tem tipos de data e hora dedicados , mas tem algumas funções de data e hora . Siga os formatos de representação de string (na verdade, apenas os formatos 1-10) compreendidos por essas funções (armazenando o valor como uma string) e então você pode usá-los, mais a comparação lexicográfica nas strings irá corresponder à comparação de data e hora (contanto que você não tente comparar datas com horas ou datas com horas, o que não faz muito sentido de qualquer maneira).
Dependendo de qual idioma você usa, você pode até obter conversão automática . (O que não se aplica a comparações em instruções SQL como o exemplo, mas tornará sua vida mais fácil.)
fonte
date
edatetime
date
(oudatetime
) na coluna que internamente é tratado comotext
. Isso atende às minhas necessidades.Para resolver esse problema, armazeno as datas como
YYYYMMDD
. Portanto,where mydate >= '20090101' and mydate <= '20050505'
Simplesmente FUNCIONA o tempo todo. Você só precisa escrever um analisador para controlar como os usuários podem inserir suas datas para que você possa convertê-las em
YYYYMMDD
.fonte
Tive o mesmo problema recentemente e resolvi assim:
fonte
strftime
de uma cláusula WHERE como neste exemplo e tenho uma pergunta: É eficiente usarstrftime
assim? Ele é avaliado uma vez para cada linha ou uma vez por consulta?O seguinte está funcionando bem para mim usando SQLite:
fonte
Sqlite não pode comparar datas. precisamos converter em segundos e convertê-lo como inteiro.
Exemplo
fonte
Seguir funcionou para mim.
fonte
Tenho uma situação em que desejo dados de até dois dias atrás e até o final de hoje. Cheguei ao seguinte.
Ok, tecnicamente eu também puxo amanhã à meia-noite como o pôster original, se houver algum dado, mas meus dados são todos históricos.
O principal a ser lembrado é que o pôster inicial excluiu todos os dados após 15-11-2009 00:00:00. Portanto, quaisquer dados que foram registrados à meia-noite do dia 15 foram incluídos, mas quaisquer dados após a meia-noite do dia 15 não foram. Se sua consulta fosse,
Uso da cláusula between para maior clareza.
Teria sido um pouco melhor. Ele ainda não leva em consideração os segundos bissextos em que uma hora pode realmente ter mais de 60 segundos, mas bom o suficiente para discussões aqui :)
fonte
Tive que armazenar a hora com as informações de fuso horário e consegui fazer as consultas funcionarem com o seguinte formato:
A hora é armazenada no banco de dados como TEXTO normal no seguinte formato:
fonte
Abaixo estão os métodos para comparar as datas, mas antes disso precisamos identificar o formato da data armazenada no DB
Eu tenho datas armazenadas no formato MM / DD / AAAA HH: MM, então elas devem ser comparadas nesse formato
A consulta abaixo compara a conversão da data no formato MM / DD / AAA e obtém os dados dos últimos cinco dias até hoje. O operador BETWEEN ajudará e você pode simplesmente especificar a data de início E a data de término.
A consulta abaixo usará o operador maior que (>).
Todo o cálculo que fiz está usando a hora atual, você pode alterar o formato e a data de acordo com sua necessidade.
Espero que isso te ajude
Summved
fonte
Você também pode escrever suas próprias funções de usuário para lidar com datas no formato que você escolher. SQLite possui um método bastante simples para escrever suas próprias funções de usuário. Por exemplo, escrevi alguns para adicionar durações de tempo juntos.
fonte
Minha consulta fiz da seguinte maneira:
Recebi a dica com a resposta de @ ifredy. Tudo o que fiz foi, queria que essa consulta fosse executada no iOS, usando Objective-C. E funciona!
Espero que alguém que faz desenvolvimento para iOS também aproveite esta resposta!
fonte
No momento estou desenvolvendo usando o pacote System.Data.SQlite NuGet (versão 1.0.109.2). Que usando SQLite versão 3.24.0.
E isso funciona para mim.
Não pretendo usar a função datetime (). Talvez eles já tenham atualizado a consulta SQL nessa versão do SQLite.
fonte