日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]問候。
我的公司終於能夠發布 JMP14,所以我很高興嘗試新功能。 特別是 Semiconductor Take Kit 和 Calendar Box() 函數。 所以我的第一步是解析從資料範圍中提取的大量資料。 我終於成功地將 3388594698 轉換為實際日期。以下是輸出的範例:
sqlstart = "01/18/2018 12:00:00 AM";
sqlend = "12/12/2018 1:25:05 PM";
但是我們的資料庫的時間戳格式類似 2018-10-28 16:59:03。 我嘗試使用腳本指南和本網站上的帖子來解決此問題,但無濟於事。 腳本結束將關閉窗口,並將打開另一個窗口作為第 2 部分,但希望儀表板能夠容納所有內容。 但這是下一個障礙。
任何幫助將不勝感激。
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" ) );
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]如果可以的話,我有幾個後續問題
- 在您提供連接字串的程式碼中,我遇到了 SQL NATIVE CLIENT 問題,因為我注意到它預設為 32 位元 MySQL 驅動程式。 我們的資料庫使用 64 位元驅動程式。 我在網上查找,找不到 NATIVE CLIENT 的替代品。
- JMP 是否能夠虛擬連接表並儲存所有資訊而不將它們放入表中? 我們有4 個主要測試,在這4 個測試中,我們有8 個子測試,因此,如果我ping 伺服器並將其放入表中,則對於一個晶圓的數據,它約為61,000 行x 24 列。 回想起來,我們有大約 50 個晶圓的數據,因此您可以看到資料集有多大。 我想使用 Dashbord 功能來過濾並產生我們進行分析所需的報告。
一如既往,我感謝社會各界的幫助與支持。 如果這令人困惑,請隨時聯繫我們尋求澄清。 我改變了很多東西,所以不透露太多關於我們測試的細節
// 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
"
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]非常感謝你的協助.. 奇蹟般有效。
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]您可以使用評估插入使程式碼看起來更簡潔,並將數值自動轉換為字串。只需用插入符 (^) 包圍變量,如下所示:
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");
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]謝謝.. 我一上班就會嘗試這個。
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]僅在範例程式碼中提到不存在。
我現在能為您做的最有用的事情可能是發布一個我剛剛運行的工作範例:
Names Default To Here( 1 );
nw = New Window( "DATE SELECTION",
<<MODAL>= ' " || sqlstart || " ' AND runStartTime <= ' " || sqlend || " '
";
dt = Execute SQL(SQLConnection,
SQLcode,
"dt"
);</MODAL>回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]我虔誠地使用「||某物||」。 我一直在嘗試解決的問題
解決是當我使用 '"||sqlstart||"' 時處理串聯
我只能假設 sqlsart 是一個數值變數
我必須轉換為字元才能正常工作。 當我添加
Show() for StartDate、sqlstartA 和 sqlstart 我看到了對話
過程。 將其放入查詢本身是困擾我的事情。
我一直在嘗試先自己解決這個問題,而不是直接過來
在這裡並被告知答案。
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]你好,
在 SQL where 子句中,任何日期都需要用 ' 括起來
例子:
"
SELECT
*
FROM Runs
WHERE
RunStartDate > '2018-09-01'
";
"
SELECT
*
FROM Runs
WHERE
RunStartDate > ' " || DATE || " '
";
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]你使用什麼資料庫?
您需要將日期轉換為資料庫日期(Oracle 中的 TO_DATE),或將它們作為字串傳遞,因此需要將 JMP 日期以單引號引起來。有沒有辦法讓您直接針對資料庫執行 SQL 程式碼,也許是在 Toad 或類似產品中?這樣您就可以迭代您的程式碼,直到它在資料庫中運行,然後在 JSL 中呼叫它。
順便說一句,而不是使用開放資料庫我會推薦建立資料庫連接,執行sql , 和關閉資料庫連接。這樣您就可以開啟與資料庫的連接,執行一個或多個查詢,然後關閉連接。Open Database 為每個 SQL 查詢建立一個新連線。
回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]感謝您的幫助.. 您能否詳細說明一下“更改您的 SQL 程式碼以包含 '”?回覆:日曆框() - 日期範圍 - 轉換日期/時間 - SQL[資料庫]你好,
我的理解是您希望將日曆框選擇用作 SQL 中的日期過濾器?
如果是這樣,您將需要更改 2 個腳本:
- 使用格式變更日期格式
- 更改您的 SQL 程式碼以包含 '
我在下面展示了一個例子:
/******************************************************************************/
/* */
/* 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
"
);