日历框() - 日期范围 - 转换日期/时间 - 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
"
);