Je n'arrive pas à obtenir des résultats fiables de la requête sur une base de données sqlite en utilisant une chaîne datetime comme comparaison comme suit:
select *
from table_1
where mydate >= '1/1/2009' and mydate <= '5/5/2009'
comment dois-je gérer les comparaisons datetime avec sqlite?
update: le champ mydate est un type de données DateHeure
mydate
colonne? Je suppose que ce n'est pas l'un des formats pris en charge par SQLite: sqlite.org/lang_datefunc.html'2009-11-13'
, pour mydate, sera inférieur à'2009-11-13 00:00:00'
.)Datetime()
que j'exécute une requête de date / heure, je dois utiliser le tout comme @Brad l'a inclus dans sa mention de la solution. Sinon VS2012 se plaint. Merci Brad.Réponses:
SQLite n'a pas de types datetime dédiés , mais possède quelques fonctions datetime . Suivez les formats de représentation de chaîne (en fait uniquement les formats 1 à 10) compris par ces fonctions (en stockant la valeur sous forme de chaîne), puis vous pouvez les utiliser, plus la comparaison lexicographique sur les chaînes correspondra à la comparaison datetime (tant que vous ne le faites pas) essayez de comparer les dates aux heures ou les dates-heures aux heures, ce qui n'a de toute façon pas beaucoup de sens).
Selon la langue que vous utilisez, vous pouvez même obtenir une conversion automatique . (Ce qui ne s'applique pas aux comparaisons dans les instructions SQL comme l'exemple, mais vous facilitera la vie.)
la source
date
etdatetime
date
(oudatetime
) sur la colonne qui est traitée en interne commetext
. Cela correspond à mes besoins.Pour résoudre ce problème, je stocke les dates au format
YYYYMMDD
. Donc,where mydate >= '20090101' and mydate <= '20050505'
Cela fonctionne tout simplement tout le temps. Vous n'aurez peut-être besoin que d'écrire un analyseur pour gérer la façon dont les utilisateurs peuvent entrer leurs dates afin que vous puissiez les convertir en
YYYYMMDD
.la source
J'ai eu le même problème récemment, et je l'ai résolu comme ceci:
la source
strftime
dans une clause WHERE comme dans cet exemple, et j'ai une question: est-il efficace d'utiliserstrftime
comme ça? Est-il évalué une fois pour chaque ligne ou une fois par requête?Ce qui suit fonctionne très bien pour moi en utilisant SQLite:
la source
Sqlite ne peut pas comparer sur les dates. nous devons convertir en secondes et le convertir en nombre entier.
Exemple
la source
La suite a fonctionné pour moi.
la source
J'ai une situation où je veux des données d'il y a jusqu'à deux jours et jusqu'à la fin d'aujourd'hui. Je suis arrivé à ce qui suit.
Ok, techniquement, je tire aussi à minuit demain comme l'affiche originale, s'il y avait des données, mais mes données sont toutes historiques.
La chose clé à retenir, l'affiche initiale excluait toutes les données après le 15/11/2009 à 00:00:00. Ainsi, toutes les données enregistrées à minuit le 15 ont été incluses, mais toutes les données après minuit le 15 ne l'étaient pas. Si leur requête était,
Utilisation de la clause between pour plus de clarté.
Cela aurait été un peu mieux. Cela ne prend toujours pas en compte les secondes intercalaires dans lesquelles une heure peut en réalité avoir plus de 60 secondes, mais assez bien pour les discussions ici :)
la source
J'ai dû stocker l'heure avec les informations de fuseau horaire, et j'ai pu obtenir des requêtes fonctionnant avec le format suivant:
L'heure est stockée dans la base de données sous forme de TEXTE normal au format suivant:
la source
Voici les méthodes pour comparer les dates, mais avant cela, nous devons identifier le format de la date stockée dans DB
J'ai des dates stockées au format MM / JJ / AAAA HH: MM, il faut donc les comparer dans ce format
La requête ci-dessous compare la conversion de la date au format MM / JJ / AAA et obtient les données des cinq derniers jours jusqu'à aujourd'hui. L'opérateur BETWEEN vous aidera et vous pouvez simplement spécifier la date de début ET la date de fin.
La requête ci-dessous utilisera l'opérateur supérieur à (>).
Tout le calcul que j'ai fait utilise l'heure actuelle, vous pouvez changer le format et la date selon vos besoins.
J'espère que ceci vous aidera
Résumé
la source
Vous pouvez également rédiger vos propres fonctions utilisateur pour gérer les dates dans le format que vous choisissez. SQLite a une méthode assez simple pour écrire vos propres fonctions utilisateur. Par exemple, j'en ai écrit quelques-uns pour additionner les durées de temps.
la source
Ma requête j'ai fait comme suit:
J'ai eu la réponse de @ ifredy. Tout ce que j'ai fait, c'est que je voulais que cette requête soit exécutée dans iOS, en utilisant Objective-C. Et il fonctionne!
J'espère que quelqu'un qui fait du développement iOS utilisera également cette réponse!
la source
En ce moment, je développe en utilisant le package NuGet System.Data.SQlite (version 1.0.109.2). Qui en utilisant la version 3.24.0 de SQLite.
Et cela fonctionne pour moi.
Je n'ai pas l'intention d'utiliser la fonction datetime (). Peut-être ont-ils déjà mis à jour la requête SQL sur cette version de SQLite.
la source