Kalenderfeld () - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Grüße.
Mein Unternehmen konnte endlich JMP14 veröffentlichen, daher freue ich mich sehr darauf, die neuen Funktionen auszuprobieren. Insbesondere das Semiconductor Take Kit und die Calendar Box()-Funktion. Mein erster Schritt besteht also darin, die großen Datenmengen zu analysieren, die aus einem Datenbereich gezogen werden. Ich habe es endlich geschafft, die 3388594698 in ein tatsächliches Datum umzuwandeln.Hier ist ein Beispiel für die Ausgabe:
sqlstart = "18.01.2018 00:00:00";
sqlend = "12.12.2018 13:25:05";
Unsere Datenbank hat jedoch den Zeitstempel im Format 2018-10-28 16:59:03. Ich habe versucht, dies mit dem Scripting Guide und Beiträgen auf dieser Website zu lösen, aber ohne Erfolg. Das Ende des Skripts schließt das Fenster und öffnet ein weiteres als Teil Nr. 2, möchte aber, dass das Dashboard alles enthält. Aber das ist die nächste Hürde.
Jede Hilfe wäre sehr willkommen.
D
Close All( Data Tables, No Save );
Close All( Reports );
Clear Log();
Close All( journals, no save );
Clear Symbols();
/******************************************************************************/
/* */
/* Brings in the list of wafers from the SQL Query [Current] */
/* */
/******************************************************************************/
testdata_HAY_QQ_LotList = Expr(
"
SELECT DISTINCT
t1.wafer_number,
t1.testdate
FROM tst_master t1
LEFT OUTER JOIN tst_dataset_header t2
ON ( t2.run_id = t1.run_id )
WHERE t1.testdate >= cast('2018-01-01' AS date) // Currently How I select a list of lots.
AND (t1.wafer_number NOT RLIKE '-ATL' )
ORDER BY t1.testdate DESC
"
);
/*******************************************************************************/
/* */
/* Brings in the list of wafers from the SQL Query [Desired with Caledar Box] */
/* */
/*******************************************************************************/
testdata_HAY_QQ_LotList = Expr(
"
SELECT DISTINCT
t1.wafer_number,
t1.testdate
FROM tst_master t1
LEFT OUTER JOIN tst_dataset_header t2
ON ( t2.run_id = t1.run_id )
WHERE (t1.testdate <= "||sqlstart||") // Varible from Date Selection
AND (t1.testdate >= "||sqlend||") // Varible from Date Selection
AND (t1.wafer_number NOT RLIKE '-ATL' )
ORDER BY t1.testdate DESC
"
);
/******************************************************************************/
/* */
/* LotList is used in the next step of the data pull selecting the wafers */
/* */
/******************************************************************************/
dt_LotList = Open Database( DATABASE, testdata_HAY_QQ_LotList, "LotList" );
Summarize( LotList = By( :wafer_number ) );
Close( dt_lotlist, No Save );
/******************************************************************************/
/* */
/* Start of Main Script [Calendar Box() to Select Wafer with Date Range] */
/* */
/******************************************************************************/
nw = New Window( "DATE SELECTION",
V List Box(
Align( Left ),
V List Box(
Spacer Box(
Size( 5, 15 )
),
Text Box(
"LOT DATE RANGE",
<< Set Font Name( "Segoe UI" ),
<< Set Font Style( "Bold" ),
<< Set Font Size( 12 ),
<< Justify Text( "Center" )
),
Spacer Box(
Size( 5, 20 )
),
H List Box(
Panel Box( "Select Start Date",
StartDate = Calendar Box(),
),
Spacer Box(),
Panel Box( "Select End Date",
EndDate = Calendar Box(),
)
),
Panel Box( "",
loadlot = Button Box( "LOAD LOT LIST",
<< Set Function(
Function(
{self},
sqlstart = MDYHMS( StartDate << Get Date()); // passed to database query
sqlend = MDYHMS( EndDate << Get Date()); // passed to database query
Show( sqlstart );
Show( sqlend );
self << close window;
)
)
)
)
)
)
);
date_start = Date MDY( 01, 1, 2018 );
StartDate << Date( date_start );
StartDate << Show Time( 0 );
StartDate << Min Date( Date Increment( Today(), "Day", -365, "Start" ) );
date_end = Date MDY( 01, 1, 2018 );
EndDate << Date( date_end );
EndDate << Show Time( 0 );
EndDate << Min Date( Date Increment( Today(), "Day", -365, "Start" ) );
Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Ich habe ein paar Anschlussfragen, wenn ich darf
- In dem Code, den Sie mit der Verbindungszeichenfolge bereitgestellt haben, hatte ich ein Problem mit SQL NATIVE CLIENT, da mir aufgefallen ist, dass standardmäßig der 32-Bit-MySQL-Treiber verwendet wird. Unsere Datenbanken verwenden den 64-Bit-Treiber. Ich habe online gesucht und konnte keinen Ersatz für den NATIVE CLIENT finden.
- Kann JMP Tabellen virtuell verbinden und alle Informationen speichern, ohne sie in Tabellen zu bringen? Wir haben 4 Haupttests und innerhalb dieser 4 Tests haben wir 8 Untertests, so dass es für die Daten eines Wafers ungefähr 61.000 Zeilen x 24 Spalten sind, wenn ich den Server anpinge und in eine Tabelle bringe. Rückblickend haben wir Daten im Wert von etwa 50 Wafern, sodass Sie sehen können, wie groß der Datensatz sein könnte. Ich möchte die Dashbord-Funktion verwenden, um die Berichte zu filtern und zu erstellen, die wir für unsere Analyse benötigen.
Wie immer schätze ich die Hilfe und Unterstützung der Community. Wenn dies verwirrend ist, zögern Sie bitte nicht, sich zur Klärung erneut an uns zu wenden. Ich habe einige Dinge geändert, um nicht zu viele Details über unsere Tests preiszugeben
// 32bit SQL Driver
ev = Get Environment Variable( "computername" );
ConnectionString = "DRIVER=SQL NATIVE CLIENT; SERVER=***; DATABASE=***; Uid=***;Pwd=***" // Need 64 bit
Try(Close database connection(SQLConnection));
SQLConnection = Create database connection(ConnectionString);
// Main SQL Query that brings in all data for a wafer(s)
"
SELECT
CASE
WHEN t2.testname = TEST_1 THEN t3.ts
WHEN t2.testname = 'TEST_2' THEN t4.ts
WHEN t2.testname = 'TEST_3' THEN t5.ts
WHEN t2.testname = TEST_4' THEN t6.ts
END AS TimeStamp,
t1.wafer_number,
t2.die_id,
t2.run_id,
t2.rownum,
t2.colnum,
t2.subrow,
t2.subcol,
t2.part_number,
t2.testname,
t2.set_id,
t2.trmode,
t2.channel,
t2.teststate,
t2.refstate,
t2.attenstate,
t3.Supply_Name,
t3.Current,
CASE
WHEN t2.testname = 'TEST_2' THEN t4.INPUT / 1000000000
WHEN t2.testname = 'TEST_4' THEN t6.INPUT / 1000000000
END AS INPUT_1,
CASE
WHEN t2.trmode = 'TX' THEN t4.TEST_2d
WHEN t2.trmode = 'RX' THEN t4.TEST_2a
END AS TEST_2ad,
CASE
WHEN t2.trmode = 'TX' THEN t4.TEST_2a
WHEN t2.trmode = 'RX' THEN t4.TEST_2d
END AS TEST_2da,
CASE
WHEN t2.trmode = 'Tx' THEN t4.TEST_2b
WHEN t2.trmode = 'Rx' THEN t4.TEST_2c
END AS TEST_2cc,
t5.ErrorCount,
CASE
WHEN t2.trmode = 'Tx' THEN t4.TEST_2b
WHEN t2.trmode = 'Rx' THEN t4.TEST_2c
WHEN t2.testname = 'TEST_1' THEN t3.Current
WHEN t2.testname = 'TEST_3' THEN t5.ErrorCount
END AS TestOutput,
t6.INPUT,
t6.TEST_4a,
t6.TEST_4b
FROM tst_master t1
LEFT OUTER JOIN tst_dataset_header t2
ON ( t2.run_id = t1.run_id )
LEFT OUTER JOIN tst_vector t5
ON ( t5.header_id = t2.header_id )
LEFT OUTER JOIN tst_test_1 t3
ON ( t3.header_id = t2.header_id )
LEFT OUTER JOIN tst_test_2 t4
ON ( t4.header_id = t2.header_id )
LEFT OUTER JOIN tst_test_4 t6
ON ( t6.header_id = t2.header_id )
WHERE ((( t2.testname IN ('TEST_1', 'TEST_2, 'TEST_3', 'TEST_4' ))
AND ( t2.teststate IN ( '1' , '3', '0x0' ))))
AND (t2.set_id NOT LIKE '1140' )
AND (t2.set_id NOT LIKE '1240' )
AND (t2.part_number LIKE 'WAFER_1')
AND (t1.wafer_number IN ( "||LotListSQLString||" ) ) // derived from the previous script you provided in your last reply
"
Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Danke für deine Unterstützung.. Klappt wunderbar.
Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Sie können verwenden evalinsert für sauberer aussehenden Code und automatische Umwandlung von numerischen Werten in Zeichenketten.Umgeben Sie Ihre Variable einfach mit dem Caret-Zeichen (^) wie folgt:
testdata_HAY_QQ_LotList = evalinsert(
"SELECT DISTINCT
t1.wafer_number,
t1.testdate
FROM tst_master t1
LEFT OUTER JOIN tst_dataset_header t2
ON ( t2.run_id = t1.run_id )
WHERE (t1.testdate <= '^sqlstart^') /* Varible from Date Selection */
AND (t1.testdate >= '^sqlend^') /* Varible from Date Selection */
AND (t1.wafer_number NOT RLIKE '-ATL' )
ORDER BY t1.testdate DESC");
Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Danke schön.. Ich werde das versuchen, sobald ich zur Arbeit komme.
Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Nur in Ihrem Beispielcode als nicht vorhanden erwähnt.
Das wahrscheinlich Nützlichste, was ich jetzt für Sie tun kann, ist, ein funktionierendes Beispiel zu posten, das ich gerade ausgeführt habe:
Names Default To Here( 1 );
nw = New Window( "DATE SELECTION",
<<MODAL>= ' " || sqlstart || " ' AND runStartTime <= ' " || sqlend || " '
";
dt = Execute SQL(SQLConnection,
SQLcode,
"dt"
);</MODAL>Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Ich benutze das '"||etwas||"' religiös. Das Problem, das ich versucht habe
lösen ist, wenn ich '"||sqlstart||"' verwende, ist ein Umgang mit der Verkettung
dieser Variablen, von der ich nur annehmen kann, dass sqlsart ein numerischer Wert ist
und ich muss in Zeichen konvertieren, damit es richtig funktioniert. Als ich hinzufügte
Show() für StartDate, sqlstartA und sqlstart Ich sehe die Konversation
Verfahren. Es in die Abfrage selbst zu bekommen, hat mich verblüfft.
Ich habe versucht, das zuerst alleine zu lösen, anstatt einfach zu kommen
hier und die Antwort gesagt bekommen.
Betreff: Kalenderfeld () - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Hallo,
In der SQL-Where-Klausel müssen alle Daten von 'umschlossen werden'
Beispiele:
"
SELECT
*
FROM Runs
WHERE
RunStartDate > '2018-09-01'
";
"
SELECT
*
FROM Runs
WHERE
RunStartDate > ' " || DATE || " '
";
Betreff: Kalenderfeld() - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Welche Datenbank verwendest du?
Sie müssen Ihre Daten entweder in ein Datenbankdatum (TO_DATE in Oracle) konvertieren oder sie als Zeichenfolge übergeben, daher müssen Sie das JMP-Datum in einfache Anführungszeichen setzen.Gibt es eine Möglichkeit, den SQL-Code direkt gegen die Datenbank auszuführen, vielleicht in Toad oder einem ähnlichen Produkt?Auf diese Weise können Sie Ihren Code iterieren, bis er in der Datenbank funktioniert, und ihn dann in JSL aufrufen.
Übrigens, anstatt zu verwenden Datenbank öffnen Ich würde empfehlen Datenbankverbindung herstellen , SQL ausführen , Und Datenbankverbindung schließen .Auf diese Weise können Sie eine Verbindung zur Datenbank öffnen, eine oder mehrere Abfragen ausführen und die Verbindung dann schließen.Open Database erstellt für jede SQL-Abfrage eine neue Verbindung.
Betreff: Kalenderfeld () - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Danke für die Hilfe.. Können Sie das "Ändern Sie Ihren SQL-Code so, dass er ' enthält" bitte näher erläutern.Betreff: Kalenderfeld () - Datumsbereich - Datum/Uhrzeit konvertieren - SQL[Datenbank]Hallo,
Soweit ich weiß, möchten Sie, dass die Kalenderauswahl als Datumsfilter in SQL verwendet wird?
In diesem Fall benötigen Sie zwei Skriptänderungen:
- Verwenden Sie Format, um das Datumsformat zu ändern
- Ändern Sie Ihren SQL-Code so, dass er '
Ich habe unten ein Beispiel gezeigt:
/******************************************************************************/
/* */
/* Start of Main Script [Calendar Box() to Select Wafer with Date Range] */
/* */
/******************************************************************************/
nw = New Window( "DATE SELECTION",
V List Box(
Align( Left ),
V List Box(
Spacer Box(
Size( 5, 15 )
),
Text Box(
"LOT DATE RANGE",
<< Set Font Name( "Segoe UI" ),
<< Set Font Style( "Bold" ),
<< Set Font Size( 12 ),
<< Justify Text( "Center" )
),
Spacer Box(
Size( 5, 20 )
),
H List Box(
Panel Box( "Select Start Date",
StartDate = Calendar Box(),
),
Spacer Box(),
Panel Box( "Select End Date",
EndDate = Calendar Box(),
)
),
Panel Box( "",
loadlot = Button Box( "LOAD LOT LIST",
<< Set Function(
Function(
{self},
sqlstartA = StartDate << Get Date(); // passed to database query
sqlendA = EndDate << Get Date(); // passed to database query
Show( sqlstart );
Show( sqlend );
self << close window;
)
)
)
)
)
)
);
sqlstart = format(sqlstartA, "Y/M/D h:m:s");
sqlend = format(sqlendA, "Y/M/D h:m:s");
/*******************************************************************************/
/* */
/* Brings in the list of wafers from the SQL Query [Desired with Caledar Box] */
/* */
/*******************************************************************************/
testdata_HAY_QQ_LotList = Expr(
"
SELECT DISTINCT
t1.wafer_number,
t1.testdate
FROM tst_master t1
LEFT OUTER JOIN tst_dataset_header t2
ON ( t2.run_id = t1.run_id )
WHERE (t1.testdate <= '"||sqlstart||"') // Varible from Date Selection
AND (t1.testdate >= '"||sqlend||"') // Varible from Date Selection
AND (t1.wafer_number NOT RLIKE '-ATL' )
ORDER BY t1.testdate DESC
"
);