Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Saludos.
Mi empresa finalmente pudo liberar JMP14, por lo que estoy muy emocionado de probar las nuevas funciones. Específicamente, el Semiconductor Took Kit y la función Calendar Box(). Entonces, mi primer paso es analizar las grandes cantidades de datos extraídos de un rango de datos. Finalmente logré convertir el 3388594698 en una fecha real.Aquí hay un ejemplo de la salida:
sqlstart = "18/01/2018 00:00:00";
sqlend = "12/12/2018 13:25:05";
Sin embargo, nuestra base de datos tiene la marca de tiempo formateada como 2018-10-28 16:59:03. He intentado resolver esto utilizando la Guía de secuencias de comandos y las publicaciones en este sitio web, pero fue en vano. El final del script cierra la ventana y abrirá otra como la Parte n.º 2, pero me gustaría que el panel contuviera todo. Pero ese es el siguiente obstáculo.
Cualquier ayuda sería muy apreciada.
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" ) );
Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Tengo un par de preguntas de seguimiento si se me permite
- En el código que proporcionó con la cadena de conexión, tuve un problema con el CLIENTE NATIVO de SQL, ya que noté que está predeterminado en el controlador MySQL de 32 bits. Nuestras bases de datos utilizan el controlador de 64 bits. Busqué en línea y no pude encontrar el reemplazo para el CLIENTE NATIVO.
- ¿JMP tiene la capacidad de unir mesas virtualmente y almacenar toda la información sin traerla a las mesas? Tenemos 4 pruebas principales y dentro de esas 4 pruebas tenemos 8 subpruebas, por lo que para los datos de una oblea se encuentra en ~ 61,000 filas x 24 columnas si hago ping al servidor y lo llevo a una tabla. En retrospectiva, tenemos alrededor de ~ 50 obleas de datos para que pueda ver qué tan grande podría ser el conjunto de datos. Me gustaría usar la función Dashbord para filtrar y producir los informes que necesitamos para hacer nuestro análisis.
Como siempre, agradezco la ayuda y el apoyo de la comunidad. Si esto es confuso, no dude en comunicarse nuevamente para obtener una aclaración. Cambié bastantes cosas para no revelar demasiados detalles sobre nuestras pruebas.
// 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: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Muchas gracias por su asistencia.. Funciona de maravilla.
Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Puedes usar Evalinsert para un código de apariencia más limpia y conversión automática de valores numéricos a cadenas de caracteres.Simplemente rodee su variable con el carácter de intercalación (^) así:
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: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Gracias.. Probaré esto tan pronto como llegue al trabajo.
Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Solo se menciona como ausente de su código de ejemplo.
Probablemente lo más útil que puedo hacer por usted ahora es publicar un ejemplo de trabajo que acabo de ejecutar:
Names Default To Here( 1 );
nw = New Window( "DATE SELECTION",
<<MODAL>= ' " || sqlstart || " ' AND runStartTime <= ' " || sqlend || " '
";
dt = Execute SQL(SQLConnection,
SQLcode,
"dt"
);</MODAL>Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Uso el '"||algo||"' religiosamente. El problema que he estado tratando de
resolver es cuando uso '"||sqlstart||"' es un trato con la concatenación
de esa variable que solo puedo asumir es el sqlsart es un valor numérico
y tengo que convertir a carácter para que funcione correctamente. cuando agregué
Show() para StartDate, sqlstartA y sqlstart Veo la conversación
proceso. Ponerlo en la consulta en sí es lo que me ha dejado perplejo.
He estado tratando de resolver esto por mi cuenta primero en lugar de simplemente venir
aquí y que me digan la respuesta.
Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Hola,
En el SQL donde la cláusula, las fechas deben estar rodeadas por '
ejemplos:
"
SELECT
*
FROM Runs
WHERE
RunStartDate > '2018-09-01'
";
"
SELECT
*
FROM Runs
WHERE
RunStartDate > ' " || DATE || " '
";
Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]¿Qué base de datos estas usando?
Debe convertir sus fechas a una fecha de base de datos (TO_DATE en Oracle) o pasarlas como una cadena, de ahí la necesidad de envolver la fecha JMP entre comillas simples.¿Hay alguna forma de ejecutar el código SQL directamente en la base de datos, tal vez en Toad o en un producto similar?De esa manera, puede iterar en su código hasta que funcione en la base de datos y luego llamarlo en JSL.
Por cierto en lugar de usar base de datos abierta Yo lo recomiendo crear conexión de base de datos , ejecutar sql , y cerrar la conexión a la base de datos .De esa manera, puede abrir una conexión a la base de datos, ejecutar una o más consultas y luego cerrar la conexión.Open Database crea una nueva conexión para cada consulta SQL.
Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Gracias por la ayuda.. ¿Puede dar más detalles sobre "Cambiar su código SQL para incluir '" por favor?Re: Cuadro de calendario () - Rango de fechas - Convertir fecha/hora - SQL [Base de datos]Hola,
Tengo entendido que desea que la selección del cuadro de calendario se use como un filtro de fecha en SQL.
Si es así, necesitará 2 cambios de script:
- Usar formato para cambiar el formato de fecha
- Cambie su código SQL para incluir '
He mostrado un ejemplo a continuación:
/******************************************************************************/
/* */
/* 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
"
);