Requête SQL dans Postgresql
Bonjour à toutes et à tous.
À partir d'une table dont une colonne correspond à la date de naissance, je désire obtenir l'âge des adhérents à un club. La requête testée avec pgAdmin est construite de la manière suivante, sachant que la date est stockée au format yyyy,mm,dd :
Code:
1 2 3 4 5 6 7 8 9
| SET datestyle TO 'SQL,DMY';
SELECT ...
...
extract(year from age(t_e_adherent_adh.adh_date_naissance)) AS "Âge",
...
FROM
...
WHERE
...; |
Cette requête fonctionne bien sous pgAdmin.
Je n'arrive pas au même résultat depuis Lazarus avec le composant TSQLQuery. J'obtiens une erreur External: SIGSEGV.
J'ai essayé d'enchaîner deux requêtes telles que :
Code:
1 2 3 4 5 6 7
| RequeteSQL.Close;
s:= 'SET datestyle TO ' + '"SQL,DMY"' + ';';
RequeteSQL.SQL.Text:=s;
RequeteSQL.ExecSQL;
RequeteSQL.Close;
RequeteSQL.SQL.LoadFromFile('_adherents.sql');
RequeteSQL.Open; |
Est-ce que le principe est correct pour l'enchaînement des requêtes? Pour l'écriture de s j'ai essayé un peu tout avec les quotes.
Merci de votre aide.
Michel
Quotes: Utiliser systématiquement la fonction Format
Citation:
Envoyé par
Miflon
Merci de cette réponse supersonique!
J'ai enlevé la première ligne et tout fonctionne correctement. Je marque le sujet comme résolu.
J'aurais deux questions.
Comment choisir entre une requête programmée et une requête lue dans un fichier?
J'ai du mal à coder les lignes d'une requête SQL en Pascal lorsqu'il y a des chaînes de caractères. Il faut toujours que je teste avec un nombre variable de quotes avant de trouver la bonne expression.
Utiliser systématiquement la fonction Format si vous voulez composer vos requêtes.
Syntaxe:
ChaineFormattee = Format('chaine_format', [var0, var1, ...]);
où chaine_format contient des codes de formatage identiques aux règles de la fonction printf() du C
Exemple:
Soient
Code:
1 2 3 4 5
|
CONST MyTableCancres = 'TableCancres'; // table des élèves éligibles au Concours Général
EWE := 'Toto';
WU := 666; |
on veut construire une requête SQL de la forme:
Code:
1 2
|
SELECT * FROM TableCancres WHERE (Nom = "Toto" OR Punitions > 666); |
Utiliser:
Code:
1 2
|
MyRequeteSQL := Format('SELECT * from `%s` WHERE (Nom="%s" OR Punitions > %d);', [MyTableCancres, EWE, WU]); |
Codes de formatage usuels:
%s : Pour un string (avec et/ou sans le triangle de tissu) :lol:
%d : pour un entier
%.3d : avec des zéros non significatifs devant
%.2f : nombre en virgule flottante avec deux décimales
Format des dates en MySQL
Citation:
Envoyé par
SergioMaster
P.S. pour la date , je dois avouer n'avoir jamais tenter la chose , en général c'est directement CURRENT_DATE que je mets , il faudra que je fasse un test de confirmation :oops:
Soit MaDate contenant une date que je veux envoyer à la BDD.
Le format de date en SQL est de la forme
Code:
1 2
|
... DATE = 'YYYY-MM-DD' |
Pour envoyer une date:
Code:
1 2 3 4 5 6 7 8 9 10
|
var
AAAA, MM, JJ: word;
ClauseDate: string; // clause sur une date
...
DecodeDate(MaDate, AAAA, MM, JJ);
...
ClauseDate = Format(' (DATE = ''%.4d-%.2d-%.2d'')', [AAAA, MM, JJ]); |