Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenHallo,
Ich habe Probleme beim Versuch, eine benutzerdefinierte, auf Benutzereingaben basierende Variable in meinen SQL-Code einzufügen. Das Problem mit der Datenbank, die ich verbinde, besteht darin, dass die Datumsspalte aus Zeichen besteht. Hier ist also der eigentliche Code, der gut mit fest codierten Datumsangaben in der SQL-Abfrage funktioniert.
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
);Das Bild unten zeigt die Beispielansicht, wie die Daten in dieser Tabelle gespeichert werden. Die Spalteneigenschaft ist „Character & Nominal“.

Hier ist der Code, den ich versucht habe, eine Benutzereingabevariable einzufügen. Dieser Code gibt eine leere Tabelle zurück.
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
);
Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenVielen Dank für die Hilfe. Das hat perfekt funktioniert!
Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenDas Problem wurde durch Korrektur der WHERE-Klausel für test_date behoben
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')
Jetzt kann ich dieselben Eingabedatumsvariablen in zwei Datenbanken in derselben Abfrage verwenden. Eine Abfrage ruft Daten mit numerischen Datumsangaben ab und eine andere SQL-Abfrage ruft Daten ab, bei denen Datumsangaben zeichenbasiert sind.Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenGibt es eine Möglichkeit, dass dieselben Benutzereingaben aus dem Textfeld auf einen anderen Datenbank-SQL-Pull innerhalb desselben Skripts angewendet werden? Der einzige Haken ist, dass diese neue Datenbank einer traditionellen/standardmäßigen numerischen Datumsspalte folgt. Gibt es eine Möglichkeit, die Benutzereingaben (von Datum und bis Datum) in sekundäre Variablen mit einem numerischen Format Monat-Tag-Jahr umzuwandeln? Primäre zeichenbasierte Datumsangaben, die für das bereits gelöste Problem verwendet werden, und sekundärer Satz zum Extrahieren von Daten basierend auf numerischen Datumsangaben.
Hier ist mein SQL, das ich zum Extrahieren von Ertragsdaten aus einer anderen Datenbank verwenden möchte.
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");
Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenVielen Dank. Dieses Skript funktioniert großartig und ich erhalte die Daten.
Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenSie müssen die Luke für Ihre verschiedenen Daten anpassen. Die von JMP stammenden Daten haben eine Datumsmaske, während die Daten in Ihrer Datenbank eine andere haben. Das sollte reichen:
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);Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenVielen Dank, Mark, aber leider wird bei der Ausführung der folgende Fehler angezeigt

Der Fehler scheint durch die Verkettung des Leerzeichens zwischen Datum und Uhrzeit (rot hervorgehoben) verursacht zu werden. Gibt es eine andere Möglichkeit, den Abstand zwischen Datum und Uhrzeit festzulegen?
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
Außerdem habe ich eine Frage zum Text „am“ für die where-Klausel. Könnten Sie mir sagen, warum es dort benötigt wird?

Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenDas Datum und das Format des Datums in der Funktion TO_DATE müssen übereinstimmen.
Versuchen Sie Folgendes im ausgewählten Abschnitt des Skripts, das ich gesendet habe:
MITEINANDER AUSGEHEN(
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') Sendezeit
Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenDer Hauptgrund für dieses Problem ist, dass der Zeitstempel der Datenbank, mit der ich es zu tun habe, ein Zeichenformat ist. 

Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenHallo Mark,
Danke auch für deine Antwort. Ich habe auch Probleme mit diesem Code.
Hier sind die Schnappschüsse meiner Benutzereingaben im Textfeld und des Fehlers, den ich im Protokoll sehe


Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenHallo Jim,
Danke für die Antwort, aber ich habe immer noch Probleme. Hier sind die Schnappschüsse meiner Eingaben und die entsprechenden Fehler im Protokoll
Eingabetyp 1


Eingabetyp 2


Ich habe das Gefühl, dass das Problem von diesem Teil des Codes herrührt, aber ich bin immer noch ein lernender JSL. Ich würde mich über Feedback von Experten wie Ihnen freuen. Gibt es eine Möglichkeit, die Benutzereingabevariablen „fromdate“ und „todate“ direkt in SQL zu verwenden?

Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenIch denke, Sie müssen das Format für das Von-Datum und Bis-Datum, das der Benutzer eingibt, erzwingen, daher habe ich eine Option bereitgestellt. Ich denke jedoch, dass das Hauptproblem in der where-Anweisung liegt, daher habe ich eine Option bereitgestellt, die Sie an das heranbringen sollte, was Sie benötigen.
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
);
Betreff: Benutzerdefinierter Datumsbereich in SQL basierend auf BenutzereingabevariablenProbieren Sie es aus und sehen Sie, ob es für Sie funktioniert
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>