Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteCIAO,
Sto riscontrando problemi durante il tentativo di inserire una variabile personalizzata basata sull'input dell'utente nel mio codice SQL. Il problema con il database che sto collegando è che la colonna della data è carattere. Quindi ecco il codice effettivo che funziona bene con le date codificate all'interno della query 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'immagine seguente mostra la vista di esempio su come le date vengono salvate in questa tabella. La proprietà della colonna è Carattere e nominale.

Ecco il codice che ho provato a inserire la variabile di input dell'utente. Questo codice restituisce una tabella vuota.
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
);
Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteGrazie per l'assistenza. Questo ha funzionato perfettamente!
Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteRisolto correggendo la clausola WHERE per test_date
AND test_data.test_date BETWEEN TO_DATE('^fromdate^', 'YYYY/MM/DD hh:mi:ss am') AND TO_DATE('^todate^', 'YYYY/MM/DD hh:mi:ss am')
Ora sono in grado di utilizzare le stesse variabili di data di input su 2 database nella stessa query. Una query estrae i dati con date numeriche e un'altra sql estrae i dati in cui le date sono basate sui caratteri.Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteC'è un modo per fare in modo che lo stesso input dell'utente dalla casella di testo funzioni su un altro pull SQL del database all'interno dello stesso script? L'unico problema è che questo nuovo database segue la colonna della data di tipo numerico tradizionale/standard. C'è un modo per convertire gli input dell'utente (fromdate e todate) in variabili secondarie con un formato numerico mese-giorno-anno? Date primarie basate su caratteri da utilizzare per il problema già risolto e set secondario per estrarre dati basati su date numeriche.
Ecco il mio SQL che sto cercando di utilizzare per estrarre i dati sulla resa da un altro database.
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");
Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteGrazie mille. Questo script funziona alla grande e sto ottenendo i dati.
Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteDevi abbinare il tratteggio per le tue diverse date. Le date provenienti da JMP hanno una maschera di data, mentre le date nel database ne hanno un'altra. Questo dovrebbe farlo:
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);Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteGrazie Mark, ma sfortunatamente vedo il seguente errore durante il tentativo di esecuzione

L'errore sembra essere causato dalla concatenazione dello spazio tra la data e l'ora (evidenziata in rosso). C'è un altro modo per avere lo spazio tra la data e l'ora?
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
Inoltre ho una domanda sul testo 'am' per la clausola where. Potresti farmi sapere perché è necessario lì?

Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteLa data e il formato della data nella funzione TO_DATE devono corrispondere.
Prova questo nella sezione select dello script che ho inviato:
AD OGGI(
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/gg hh24:mi:ss') txntime
Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteIl motivo principale di questo problema è che il database con cui ho a che fare ha il timestamp è un formato di caratteri. 

Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteCiao Marco,
Grazie anche per la tua risposta. Anche io ho problemi con questo codice.
Ecco le istantanee del mio input utente nella casella di testo e l'errore che vedo nel registro


Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteCiao Jim,
Grazie per la risposta, ma ho ancora problemi. Ecco le istantanee del mio input e gli errori corrispondenti visualizzati nel registro
Tipo di ingresso 1


Tipo di ingresso 2


Ho la sensazione che il problema provenga da questa parte del codice, ma sto ancora imparando JSL. Apprezzerei il feedback di esperti come te. Esiste un modo per utilizzare direttamente la variabile di input dell'utente "fromdate" e "todate" direttamente in SQL?

Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utentePenso che sia necessario applicare il formato per la data di inizio e la data in cui l'utente inserisce, quindi ho fornito un'opzione. Tuttavia, penso che il problema principale sia nell'istruzione where, quindi ho fornito un'opzione che dovrebbe avvicinarti a ciò di cui hai bisogno.
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
);
Ri: Avere un intervallo di date personalizzato in SQL basato sulla variabile di input dell'utenteProva questo e vedi se funziona per te
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>