Comparer des dates (stockées sous forme de chaîne) dans android de base de données sqlite?
- Je stocker les dates que String
dans ma base de données dans ce format:
YYYY-MM-DD HH:MM:SS
qui est l'un des formats pris en charge (http://www.sqlite.org/lang_datefunc.html). Maintenant, je veux comparer ces stockées dates (bien, cordes) avec un autre dates. Mes dates sont stockées dans la colonne column_date
, donc j'essaye ceci:
SELECT * FROM MyTable
WHERE
(Date(column_date) >= Date (2000-01-01) AND Datetime(column_date) <= Datetime (2050-01-01))
Comme je l'ai lu la documentation, The date and time functions use a subset of IS0-8601 date and time formats. The date() function returns the date in this format: YYYY-MM-DD.
donc, je suppose, je suis en train de faire - I date de création de chaîne stockée et de la comparer avec la date de création de l'autre des chaînes de caractères.
Mais ça ne fonctionne pas, même quand column_date
est la date à partir de cette année, et comme u peut voir le début et dates de fin sont très bienveillants. Essayé aussi cette (utilisé datetime au lieu de la date):
SELECT * FROM MyTable
WHERE
(datetime(column_date) >= Date (2000-01-01) AND datetime(column_date) <= Datetime (2050-01-01))
et ce (utilisation entre à la place de <= et >=)
SELECT * FROM MyTable
WHERE
(Date(column_date) between Date (2000-01-01) AND Datetime (2050-01-01))
et toutes les autres combinaisons possibles. Ce que l'enfer je fais mal, je suis stupide, ou de la documentaion mensonges, ou j'ai raté quelque chose de très important? En essayant de trouver la solution de quelques heures, mais rien ne fonctionne...
OriginalL'auteur qkx | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
si vous êtes l'enregistrement des dates comme des chaînes de caractères dans le format
====> alors que votre champ date est un type de données DateTime
Vous devez donc utiliser cette requête
vous pouvez également utiliser le bout de code donné par @Joop Eggen avec th entre l'opérateur c'est le même approche.
La ENTRE opérateur est logiquement équivalent à une paire de comparaisons. "x ENTRE y ET z" est équivalent à "x>=y ET x<=z" sauf que, avec ENTRE les deux, le x de l'expression n'est évaluée qu'une fois. voir sqlite3 docs
Date()
sera de retour que la partie date de. N'est-ce pas exact?cela fonctionne, mais encore cant le comprendre. Dans les docs de son dit clairement, que la date ou datetime DATE de retour. Et ma colonne est une chaîne. Donc, comment est-ce possible, que u peut comparer Chaîne (=mydate) avec la date(date de création de la chaîne 2000-01-01 00:00:00 avec l'aide de datetime fonction)? Ses pas logique. Pourquoi u ne s'applique pas Datetime aussi de ma colonne, si sa chaîne?
donc en fait, pour moi, c'est logiquement à droite: Datetime(madate chaîne de caractères) <= Datetime(une autre chaîne de date). Mais cela ne fonctionne pas et que votre code fonctionne 😉 Drôle
SQLite ne pas avoir une classe de stockage mis de côté pour le stockage des dates et/ou heures!! voir la doc officielle sqlite.org/datatype3.html Vous faites référence Sqlite, Sql, c'est ce que je pense est source de confusion, vous sqlite ne prennent pas en charge le format de la date ce n'est de stocker une date comme une chaîne ou un réel
voir la section 1.2!!
OriginalL'auteur K_Anas
Devrait faire l'affaire. Cette utilise uniquement des chaînes de caractères, mais vous avez dit que ce serait raccord.
L'erreur était le manque de temps partiel ou de ne pas faire un substr sur la partie de la date. Et puis la date/heure des fonctions de conversion pourrait donner de mauvaises choses aussi.
J'ai pensé column_date était une chaîne - VARCHARS? Mais un DATETIME serait faire trop, comme la norme *2000-01-01T00:0:00', et '2000-01-01 00:00:00' sont convertibles trop.
peut-on vérifier cette date 01-01-2011 00:00:00?
00:00:00' il devrait être. Ou un
T
au lieu de l'espace, à adhérer à l'officiel de la norme ISO. Curieusement jj-MM-aaaa a été une norme (encore utilisé dans les pays-bas), mais le neutre unique aaaa-MM-jj maintenant est favorisée. Me rend optimiste, de l'Espéranto et d'autres activités.Cela fonctionne, mais est-il la solution optimale?
OriginalL'auteur Joop Eggen
Je pense que votre question est ici...
Pourquoi êtes-vous à l'aide de Datetime ici au lieu de la Date?
Essayez ceci:
cela a résolu le problème
OriginalL'auteur Barak
Date de dépôt dans le SQLite table du TEXTE et de la date les données doivent être stockées en tant que "2012-12-31 00:12:00" format de la comparaison de dose vous donne pas mal et si l'on considère que les champs sont date_from et date_to et nous sommes le stockage actuel date à to_date alors nous devrions obtenir la date actuelle comme ci-dessous et
et la requête SQL doit être
OriginalL'auteur Hasanur
Comparer des dates (stockées sous forme de chaîne) dans android de base de données SQLite. Utiliser date dans
12/07/2015
format et utiliser une requête comme ceci:Cela fonctionne pour moi.
OriginalL'auteur user3571876