달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]인사말.
우리 회사는 마침내 JMP14를 출시할 수 있게 되었기 때문에 새로운 기능을 시험해 볼 수 있게 되어 매우 기쁩니다. 특히 Semiconductor Take Kit 및 Calendar Box() 기능이 있습니다. 따라서 첫 번째 단계는 데이터 범위에서 가져온 대량의 데이터를 구문 분석하는 것입니다. 마침내 3388594698을 실제 날짜로 변환했습니다.다음은 출력의 예입니다.
sqlstart = "2018/01/18 오전 12:00:00";
sqlend = "2018/12/12 오후 1:25:05";
그러나 우리 데이터베이스에는 2018-10-28 16:59:03과 같은 형식의 타임스탬프가 있습니다. 저는 스크립팅 가이드와 이 웹사이트의 게시물을 사용하여 이 문제를 해결하려고 시도했지만 소용이 없었습니다. 스크립트가 끝나면 창을 닫고 파트 #2로 또 다른 창을 열지만 대시보드에 모든 것을 보관하려고 합니다. 그러나 그것이 다음 장애물이다.
어떤 도움이라도 대단히 감사하겠습니다.
디
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" ) );
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - 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
"
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]도와주셔서 정말 감사드립니다.. 매력처럼 작동합니다.
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - 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");
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]감사합니다.. 출근하자마자 시도해 보겠습니다.
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]예제 코드에는 없는 것으로만 언급되었습니다.
아마도 제가 지금 여러분을 위해 할 수 있는 가장 유용한 일은 방금 실행한 실제 예제를 게시하는 것입니다.
Names Default To Here( 1 );
nw = New Window( "DATE SELECTION",
<<MODAL>= ' " || sqlstart || " ' AND runStartTime <= ' " || sqlend || " '
";
dt = Execute SQL(SQLConnection,
SQLcode,
"dt"
);</MODAL>Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]나는 '||뭔가||''를 종교적으로 사용합니다. 내가 시도한 문제
해결은 '"||sqlstart||"'를 사용할 때 연결을 처리하는 것입니다.
내가 가정할 수 있는 변수 중 sqlsart는 숫자 값입니다.
올바르게 작동하려면 문자로 변환해야 합니다. 내가 추가했을 때
StartDate, sqlstartA 및 sqlstart에 대한 Show() 대화가 표시됩니다.
프로세스. 쿼리 자체에 넣는 것이 나를 당황하게 만들었습니다.
그냥 오기보다는 먼저 스스로 해결하려고 노력해 왔습니다.
여기에 답을 들었습니다.
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]안녕,
SQL where 절에서 모든 날짜는 '로 묶어야 합니다.
예:
"
SELECT
*
FROM Runs
WHERE
RunStartDate > '2018-09-01'
";
"
SELECT
*
FROM Runs
WHERE
RunStartDate > ' " || DATE || " '
";
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]어떤 데이터베이스를 사용하고 있나요?
날짜를 데이터베이스 날짜(Oracle의 경우 TO_DATE)로 변환하거나 문자열로 전달해야 하므로 JMP 날짜를 작은따옴표로 묶어야 합니다.Toad나 유사한 제품에서 데이터베이스에 대해 직접 SQL 코드를 실행할 수 있는 방법이 있습니까?이렇게 하면 데이터베이스에서 작동할 때까지 코드를 반복한 다음 JSL에서 호출할 수 있습니다.
BTW를 사용하는 것보다 데이터베이스 열기 나는 추천하고 싶다 데이터베이스 연결 생성 , SQL을 실행 , 그리고 데이터베이스 연결 닫기 .이렇게 하면 DB에 대한 연결을 열고 하나 이상의 쿼리를 실행한 다음 연결을 닫을 수 있습니다.Open Database는 모든 SQL 쿼리에 대해 새로운 연결을 생성합니다.
Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]도와 주셔서 감사합니다.. "'을 포함하도록 SQL 코드 변경"에 대해 자세히 설명해 주시겠습니까?Re: 달력 상자() - 날짜 범위 - 날짜/시간 변환 - SQL[데이터베이스]안녕,
내 이해는 달력 상자 선택을 SQL의 날짜 필터로 사용하기를 원한다는 것입니까?
그렇다면 두 가지 스크립트 변경이 필요합니다.
- 날짜 형식을 변경하려면 형식을 사용하세요.
- '를 포함하도록 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
"
);