Champ Datetime Find Sql

Bonjour,

J’ai un Model qui contient un champ sous la forme :datetime et
j’aimerais récupérer tous les enregistrements dont la date est avant x
jours.

Je n’y arrive pas et peu de plugins sont disponibles sur ce point. Un
peu coincé là…

Je vous remercie par avance pour votre aide,

Pierre

Model.find(:all, :conditions => [“date < ?”, (Date.today - x)]

La question que tu me poses est en fait plus un problème de SQL que de
Rails. Je ne peux que te conseiller le MySQL Cookbook qui est une mine
d’or.

++

yk

Le 07/11/07, Pierre V.[email protected] a écrit :

On 11/7/07, Pierre V. [email protected] wrote:

Je vous remercie par avance pour votre aide,

Pierre

Il existe un grand nombre de fonctions pratiques pour les dates :

Model.find(:all, :conditions => [“created_at >= ?”, 7.days.ago])
Model.find(:all, :conditions => [“created_at >= :lower AND created_at
<= :upper”, {:lower => 1.month.ago, :upper => 1.hour.ago}])


Fabien J.

Le mercredi 07 novembre 2007 à 17:16 +0100, Yann KLIS a écrit :

Model.find(:all, :conditions => [“date < ?”, (Date.today - x)]

ou même un truc comme
Model.find(:all, :conditions => [“date < ?”, (x.days.ago)]
:slight_smile:

On 11/7/07, Fabien J. [email protected] wrote:

<= :upper", {:lower => 1.month.ago, :upper => 1.hour.ago}])

Elles sont par ailleurs assez bien documentées dans le livre ‘agile
web devloppement’


Fabien J.

Merci beaucoup à vous tous !
Cette solution est parfaite :
Model.find(:all, :conditions => [“date < ?”, (x.days.ago)]

Merci Jérémy, Fabien, Yann

Fabien :

Il existe un grand nombre de fonctions pratiques pour les dates :

Model.find(:all, :conditions => [“created_at >= ?”, 7.days.ago])
Model.find(:all, :conditions => [“created_at >= :lower AND created_at
<= :upper”, {:lower => 1.month.ago, :upper => 1.hour.ago}])

Ou pourquoi pas :

Model.find :all, :conditions => { :created_at => 1.month.ago…1.hour.ago
}

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Merci Jean-François, c’est de l’art là !

Yann KLIS wrote:

Model.find(:all, :conditions => [“date < ?”, (Date.today - x)]

La question que tu me poses est en fait plus un problème de SQL que de
Rails.

Bonjour,

J’ai un probleme similaire, mais je ne comprends pas le probleme (meme
si j’ai bien compris que c’est du MySql!).
En fait, je veux trouver tous les elements d’une table dont la date
(“dateday”, au format sql “date”) correspond a celle que je donne ("@d",
definie avant).

Pour l’instant j’ai quelque chose comme ca :

@elements = Element.find(:all, :conditions => [‘dateday == ?’, ‘@d’])

Et je recois une erreur : revoyez votre code MySql mademoiselle :
“… the right syntax to use near '== ‘@d’) …”

Or j’ai beau regarde sur internet, je ne comprends pas pourquoi ma
syntaxe n’est pas bonne. Est-ce un probleme de MySql? de Ruby? de format
de date?

Merci d’avance!

On Nov 22, 2007 10:07 AM, Yotdragoon Y.
[email protected] wrote:

si j’ai bien compris que c’est du MySql!).

Or j’ai beau regarde sur internet, je ne comprends pas pourquoi ma
syntaxe n’est pas bonne. Est-ce un probleme de MySql? de Ruby? de format
de date?

Merci d’avance!

pourrais-tu donner un exemple de contenu de ta variable @d ?
Idéalement, un bout de dump du fichier de log pour voir la requête sql
générée.


Fabien J.

Hello,

Tu mets ‘@d’ donc Ruby ne voit pas une variable, mais une chaine
littérale “arobase d”.
Tu tentes donc de comparer une date à une chaine, en l’occurence la
chaine “@d”, et non la valeur de la variable référencée par @d. Donc
Mysql te jette, et il a raison.
Ca ira sûrement mieux en virant les quotes autour de @d, je pense, sans
que je puisse affirmer que ce sera suffisant, ne connaissant pas la
valeur prise par ton @d.


Jean-Baptiste BARTH

PS: je n’ai pas testé, ActiveRecord a peut-être des fonctionnements
tordus, mais ça m’étonnerait :slight_smile:

Yotdragoon Y. a écrit :

pourrais-tu donner un exemple de contenu de ta variable @d ?
Idéalement, un bout de dump du fichier de log pour voir la requête sql
générée.

Merci beaucoup de ta reponse.
Cependant, petit oups, je n’ai aucune idee de ce que peut etre un “dump”
ni ou trouver un fichier “log” …
Ma variable “@d” est obtenue en faisant @d = @decision.datedecision,
sachant que datedecision est un champ de mon modele decision. Ce champ
est au format date de mysql. Quand j’ecris “p @d” dans mon controlleur,
j’obtiens #Date:4908517/2,0,2299161.
Donc en gros il voit que c’est une date, mais alors dans quel format?!
Ca t’eclaire …?

Tout d’abord, tu peux utiliser simplement ‘=’ au lieu de ‘==’.

Ensuite, vérifie que @d est au format sql, soit aaaa-mm-jj. Sinon,
transforme ta variable avant de l’utiliser dans une requête sql.

Le 22/11/07, Yotdragoon Y. [email protected] a écrit
:

J’ai un probleme similaire, mais je ne comprends pas le probleme (meme
“… the right syntax to use near '== ‘@d’) …”


Thomas GALIBERT
Les Feuillantines
40 rue Raoul Bayou
34500 BEZIERS
04 67 31 83 90

Bien vu le “==” aussi :slight_smile:


Jean-Baptiste BARTH

Thomas GALIBERT a écrit :

Jean-Baptiste BARTH wrote:

Bien vu le “==” aussi :slight_smile:


Jean-Baptiste BARTH

Thomas GALIBERT a �crit :

Re-bonjour Jean-Baptiste,
Je t’embete encore un tout petit peu si tu as du temps bien sur, meme si
mon probleme est resolu : pourquoi j’obtiens une date dans un format pas
possible,
#Date:4908517/2,0,2299161, alors que ce n’est qu’un format “date” de
sql?
A quoi correspondent ces chiffres, et pourquoi je n’obtiens pas tout
betement yyyy-mm–dd?
Merci d’avance!

Tu mets ‘@d’ donc Ruby ne voit pas une variable, mais une chaine
litt�rale “arobase d”.
Tu tentes donc de comparer une date � une chaine, en l’occurence la
chaine “@d”, et non la valeur de la variable r�f�renc�e par @d. Donc
Mysql te jette, et il a raison.
Ca ira s�rement mieux en virant les quotes autour de @d, je pense, sans
que je puisse affirmer que ce sera suffisant, ne connaissant pas la
valeur prise par ton @d.


Jean-Baptiste BARTH

Bonjour,
Merci beaucoup pour ta reponse, et surtout ton explication : j’ai
compris!
J’ai essaye … mais ca n’a pas suffit.

Du coup merci a Thomas Galibert, car en effet un = simple au lieu de ==
, ca marche mieux (pourtant d’apres divers site internet pour faire une
comparaison en myszl il faut utiliser == … ca reste mysterieux pour
moi).
Et voila en combinant les deux c’est bon …
Par contre Thomas je reviens sur ton histoire de format de date parce
que j’ai essaye ta methode (lue sur un autre post) de convertir avec le
‘date(1i)’].to_i, de la fonction Date.civil et ca ne marche pas,
notemment parce que je ne mets pas de param devant mais juste d (ou @d
mais ca ne change rien).
J’aimerais bien comprendre comment marche cette methode parce que les
problemes de format de date reviennent souvent et tu as l’air de t’en
sortir avec cette conversion.
S’il existe un tuto …

En tous cas merci beaucoup!!

On Nov 22, 2007 10:31 AM, Jean-Baptiste BARTH
[email protected] wrote:

valeur prise par ton @d.

J’ai aussi laissé passé ca ?
Je ne dois vraiment pas être réveillé ce matin !


Fabien J.

On Nov 22, 2007 10:46 AM, Jean-Baptiste BARTH
[email protected] wrote:

Bien vu le “==” aussi :slight_smile:

je l’avais loupé celui-la :wink:


Fabien J.

Pour ton format bizarre, je n’ai pas le bouquin sous les yeux, mais je
suis
prêt à parier que c’est le format numérique d’une date. Savoir comment
tu
l’as eu, telle est la question à te poser, … et à nous dire.

Est-ce que cela vient d’un formulaire ? Si oui, quelle est ta méthode,
date_select ou select_time ? Ou alors, as tu créé cette date avec
Date.newou
Time.new ?

Ensuite, je t’expliquerai comment transormer ta date dans le bon format.
Même si le principe est simple :
@date =
params[:formulaire][‘date(3i)’]+‘-’+params[:formulaire][‘date(2i)’]+'-'params[:formulaire][‘date(1i)’]

Le 22/11/07, Yotdragoon Y. [email protected] a écrit
:

valeur prise par ton @d.
Du coup merci a Thomas Galibert, car en effet un = simple au lieu de ==
problemes de format de date reviennent souvent et tu as l’air de t’en
sortir avec cette conversion.
S’il existe un tuto …

En tous cas merci beaucoup!!


Posted via http://www.ruby-forum.com/.


Thomas GALIBERT
Les Feuillantines
40 rue Raoul Bayou
34500 BEZIERS
04 67 31 83 90

Thomas GALIBERT wrote:

Vous inquiétez pas :wink: c’est largement excusable. Mais comme je termine
en
ce moment une RIA de logiciel de gestion en rails, les dates, j’ai le
nez
dedans, et, je vous jure, dès fois, avec ces putains d’accents et de
format
de date, j’en ai marre d’être français !

c’est pour ça … :slight_smile:
Alors pour le format de date, j’ai tout simplement créé un fichier sql
pour ma base de données, et l’une des tables (decision) contient un
argument qui est une date au format “date” de sql, entrée sous la forme
yyyy-mm-dd, tout ce qu’il y a de plus basique.
Je n’ai pas de formulaire, c’est ce qui m’empèche par exmple d’utiliser
ta syntaxe avec les params[]. Mais a priori si j’en avais un ce serait
plutôt un date_select.
Comment cela se fait-il qu’il y ait tant de formats de date? Je veux
dire, indépendamment de la langue française, il y a yyyy-mm-dd, la
version avec les date(2i), cette nouvelle forme bizarre qui est le
format numérique qui ressemble à rien, et toutes les variantes avec des
“vrais” mots … Est-ce un problème d’uniformisation qui tend à diminuer
ou est-ce que c’est au contraire pour avoir plein de formats Ã
disposition (et donc des galères…)?
Enfin je vous embete avec toutes ces questions, ce n’est plus de l’aide
technique là !!
Merci beaucoup beaucoup!