Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurSalut,
J'ai des problèmes lorsque j'essaie d'avoir une variable basée sur l'entrée utilisateur personnalisée dans mon code SQL. Le problème avec la base de données que je connecte est que la colonne de date est un caractère. Voici donc le code réel qui fonctionne bien avec les dates codées en dur dans la requête SQL.
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24miss') txntime
FROM database p
WHERE
txntime >= '20161201 000000000'
AND txntime < '20161231 000000000'
",
// End of SQL statement
"New_Table" // New table name
);L'image ci-dessous montre l'exemple de vue sur la façon dont les dates sont enregistrées dans ce tableau. La propriété de la colonne est Character & Nominal.

Voici le code que j'ai essayé d'insérer la variable d'entrée utilisateur. Ce code renvoie une table vide.
Delete Symbols();
Delete Globals();
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
hlistbox(
text box("From Date"),
fromdate_teb = text edit box("%", << set width (100)),
),
hlistbox(
text box("To Date"),
todate_teb = text edit box("%" , << set width (100)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text;
todate = todate_teb << get text;
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24miss') txntime
FROM database p
WHERE
txntime >= '^fromdate^'
AND txntime < '^todate^'
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
);
Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurMerci pour votre aide. Cela a parfaitement fonctionné !
Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurCorrection en corrigeant la clause WHERE pour test_date
ET test_data.test_date ENTRE TO_DATE('^fromdate^', 'YYYY/MM/DD hh:mi:ss am') ET TO_DATE('^todate^', 'YYYY/MM/DD hh:mi:ss am')
Maintenant, je peux utiliser les mêmes variables de date d'entrée dans 2 bases de données dans la même requête. Une requête extrait des données avec des dates numériques et une autre sql extrait des données où les dates sont basées sur des caractères.Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurExiste-t-il un moyen de faire en sorte que la même entrée utilisateur de la zone de texte fonctionne sur une autre extraction SQL de base de données dans le même script? Le seul problème est que cette nouvelle base de données suit la colonne de date de type numérique traditionnel/standard. Existe-t-il un moyen de convertir les entrées utilisateur (fromdate & todate) en variables secondaires avec un format numérique mois-jour-année ? Dates basées sur des caractères primaires à utiliser pour le problème déjà résolu et ensemble secondaire pour extraire des données basées sur des dates numériques.
Voici mon SQL que j'essaie d'utiliser pour extraire les données de rendement d'une autre base de données.
nw = new window("New Window for user input", << modal(),
panelbox("Enter Date Range",
lineup box(ncol(2),
text box("From Date: "),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (150)),
text box("To Date: "),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (150)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
print(fromdate, todate);
Yieldsql = evalinsert(
" SELECT
model,
lot,
wafer,
COUNT(test_status_code) as BIN_COUNT
FROM
test_data
WHERE
purpose='PROD'
AND test_data.test_date BETWEEN TO_DATE('^fromdate^', 'MM/DD/YYYY hh24:mi:ss') AND TO_DATE('^todate^', 'MM/DD/YYYY hh24:mi:ss')
ORDER by lot, wafer");
dt = Open Database( "Generic database connection string", Yieldsql, "Yield_Data");
Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurMerci beaucoup. Ce script fonctionne très bien et je reçois les données.
Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurVous devez faire correspondre la trappe pour vos différentes dates. Les dates provenant de JMP ont un masque de date, tandis que les dates de votre base de données en ont un autre. Cela devrait le faire:
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
lineup box(ncol(2),
text box("From Date: "),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (150)),
text box("To Date: "),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (150)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
print(fromdate, todate);
sql = evalinsert(
"SELECT
p.productname,
p.model,
p.family,
TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') txntime
FROM database p
WHERE TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') >= to_date('^fromdate^', 'yyyy/mm/dd hh:mi:ss am')
AND TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') < to_date('^todate^', 'yyyy/mm/dd hh:mi:ss am')");
Open Database("Generic database connection string", sql, "New_Table");
print(sql);Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurMerci Mark, mais malheureusement, je vois l'erreur suivante lorsque j'essaie d'exécuter

L'erreur semble être due à la concaténation de l'espace entre la date et l'heure (surligné en rouge). Existe-t-il un autre moyen d'avoir l'espace entre la date et l'heure ?
TO_DATE(SUBSTR (txntime, 1,4)||"/"||SUBSTR(txntime,5,2)||"/"||SUBSTR(txntime,7,2)||" "||SUBSTR(txntime,10,2)||":"||SUBSTR(txntime,12,2)||":"||SUBSTR(txntime,14,2),'yyyy/mm/dd hh24:mi:ss') txntime
J'ai aussi une question sur le texte 'am' pour la clause where. Pourriez-vous me dire pourquoi est-ce nécessaire là-bas?

Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurLa date et le format de la date dans la fonction TO_DATE doivent correspondre.
Essayez ceci dans la section select du script que j'ai envoyé :
À CE JOUR(
SUBSTR (txntime, 1,4)||"/"||SUBSTR(txntime,5,2)||"/"||SUBSTR(txntime,7,2)||" "||
SUBSTR(txntime,10,2)||":"||SUBSTR(txntime,12,2)||":"||SUBSTR(txntime,14,2),
'aaaa/mm/jj hh24:mi:ss') txntime
Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurLa principale raison de ce problème est que la base de données avec laquelle je traite a un horodatage au format caractère. 

Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurBonjour Mark,
Merci également pour votre réponse. J'ai aussi des problèmes avec ce code.
Voici les instantanés de ma saisie utilisateur dans la zone de texte et l'erreur que je vois dans le journal


Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurBonjour Jim,
Merci pour la réponse, mais j'ai toujours des problèmes. Voici les instantanés de ma saisie et les erreurs correspondantes vues dans le journal
Type d'entrée 1


Type d'entrée 2


J'ai l'impression que le problème vient de cette partie du code mais j'apprends toujours JSL. J'apprécierais les commentaires d'experts comme vous. Existe-t-il un moyen d'utiliser directement la variable d'entrée utilisateur "fromdate" & "todate" directement dans SQL ?

Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurJe pense que vous devez appliquer le format pour la date de début et la date de fin que l'utilisateur entre, j'ai donc fourni une option. Cependant, je pense que le problème majeur réside dans l'instruction where, j'ai donc fourni une option qui devrait vous rapprocher de ce dont vous avez besoin.
Delete Symbols();
Delete Globals();
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
hlistbox(
text box("From Date"),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (100)),
),
hlistbox(
text box("To Date"),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (100)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24:mi:ss') txntime
FROM database p
WHERE
txntime >= to_date('"|| fromdate || "', 'yyyy/mm/dd hh:mi:ss am')
AND txntime < to_date('"|| todate || "', 'yyyy/mm/dd hh:mi:ss am')
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
);
Re : Avoir une plage de dates personnalisée dans SQL en fonction de la variable d'entrée de l'utilisateurEssayez ceci et voyez si cela fonctionne pour vous
Names Default To Here( 1 );
Delete Symbols();
Delete Globals();
nw = New Window( "Scrap Data",
<<MODAL>= __From_Date__
AND txntime < __To_Date__
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
)
),
Expr( __From_Date__ ), Parse( "'" || fromdate || "'" ),
Expr( __To_Date__ ), Parse( "'" || todate || "'" )
)
);</MODAL>