Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioHola,
Tengo problemas al intentar tener una variable personalizada basada en la entrada del usuario en mi código SQL. El problema con la base de datos que estoy conectando es que la columna de fecha es un carácter. Así que aquí está el código real que funciona bien con fechas codificadas dentro de la consulta SQL.
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24miss') txntime
FROM database p
WHERE
txntime >= '20161201 000000000'
AND txntime < '20161231 000000000'
",
// End of SQL statement
"New_Table" // New table name
);La siguiente imagen muestra la vista de muestra sobre cómo se guardan las fechas en esta tabla. La propiedad de la columna es Carácter y Nominal.

Aquí está el código que traté de insertar la variable de entrada del usuario. Este código devuelve una tabla vacía.
Delete Symbols();
Delete Globals();
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
hlistbox(
text box("From Date"),
fromdate_teb = text edit box("%", << set width (100)),
),
hlistbox(
text box("To Date"),
todate_teb = text edit box("%" , << set width (100)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text;
todate = todate_teb << get text;
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24miss') txntime
FROM database p
WHERE
txntime >= '^fromdate^'
AND txntime < '^todate^'
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
);
Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioGracias por la ayuda. ¡Esto funcionó perfectamente!
Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioSe solucionó corrigiendo la cláusula WHERE para test_date
AND test_data.test_date ENTRE HASTA LA FECHA('^fecha^', 'AAAA/MM/DD hh:mi:ss am') Y HASTA_FECHA('^todate^', 'AAAA/MM/DD hh:mi:ss am')
Ahora puedo usar las mismas variables de fecha de entrada en 2 bases de datos en la misma consulta. Una consulta extrae datos con fechas numéricas y otro sql extrae datos donde las fechas se basan en caracteres.Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuario¿Hay alguna manera de que la misma entrada de usuario del cuadro de texto funcione en otra base de datos SQL dentro del mismo script? El único inconveniente es que esta nueva base de datos sigue la columna de fecha de tipo numérico tradicional/estándar. ¿Hay alguna forma de convertir las entradas del usuario (desde fecha y fecha actual) en variables secundarias con un formato numérico mes-día-año? Fechas basadas en caracteres primarios que se utilizarán para el problema que ya está resuelto y conjunto secundario para extraer datos basados en fechas numéricas.
Aquí está mi SQL que estoy tratando de usar para extraer datos de rendimiento de otra base de datos.
nw = new window("New Window for user input", << modal(),
panelbox("Enter Date Range",
lineup box(ncol(2),
text box("From Date: "),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (150)),
text box("To Date: "),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (150)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
print(fromdate, todate);
Yieldsql = evalinsert(
" SELECT
model,
lot,
wafer,
COUNT(test_status_code) as BIN_COUNT
FROM
test_data
WHERE
purpose='PROD'
AND test_data.test_date BETWEEN TO_DATE('^fromdate^', 'MM/DD/YYYY hh24:mi:ss') AND TO_DATE('^todate^', 'MM/DD/YYYY hh24:mi:ss')
ORDER by lot, wafer");
dt = Open Database( "Generic database connection string", Yieldsql, "Yield_Data");
Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioMuchas gracias. Este script está funcionando muy bien y estoy obteniendo los datos.
Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioTienes que hacer coincidir la escotilla para tus diferentes fechas. Las fechas que provienen de JMP tienen una máscara de fecha, mientras que las fechas en su base de datos tienen otra. Esto debería hacerlo:
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
lineup box(ncol(2),
text box("From Date: "),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (150)),
text box("To Date: "),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (150)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
print(fromdate, todate);
sql = evalinsert(
"SELECT
p.productname,
p.model,
p.family,
TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') txntime
FROM database p
WHERE TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') >= to_date('^fromdate^', 'yyyy/mm/dd hh:mi:ss am')
AND TO_DATE(SUBSTR (txntime, 1, 15), 'yyyymmdd hh24miss') < to_date('^todate^', 'yyyy/mm/dd hh:mi:ss am')");
Open Database("Generic database connection string", sql, "New_Table");
print(sql);Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioGracias Mark, pero lamentablemente veo el siguiente error al intentar ejecutar

El error parece deberse a la concatenación del espacio entre la fecha y la hora (resaltados en rojo). ¿Hay alguna otra forma de tener el espacio entre la fecha y la hora?
TO_DATE(SUBSTR (txntime, 1,4)||"/"||SUBSTR(txntime,5,2)||"/"||SUBSTR(txntime,7,2)||" "||SUBSTR(txntime,10,2)||":"||SUBSTR(txntime,12,2)||":"||SUBSTR(txntime,14,2),'yyyy/mm/dd hh24:mi:ss') txntime
También tengo una pregunta sobre el texto 'am' para la cláusula where. ¿Podría decirme por qué es necesario allí?

Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioLa fecha y el formato de la fecha en la función TO_DATE deben coincidir.
Prueba esto en la sección de selección del script que envié:
HASTA LA FECHA(
SUBSTR (txntime, 1,4)||"/"||SUBSTR(txntime,5,2)||"/"||SUBSTR(txntime,7,2)||" "||
SUBSTR(txntime,10,2)||":"||SUBSTR(txntime,12,2)||":"||SUBSTR(txntime,14,2),
'aaaa/mm/dd hh24:mi:ss') txntime
Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioLa principal razón de este problema es que la base de datos con la que estoy tratando tiene una marca de tiempo en un formato de caracteres. 

Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioHola Mark,
Gracias por tu respuesta también. También tengo problemas con este código.
Aquí están las instantáneas de mi entrada de usuario en el cuadro de texto y el error que veo en el registro


Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioHola Jim,
Gracias por la respuesta, pero sigo teniendo problemas. Aquí están las instantáneas de mi entrada y los errores correspondientes vistos en el registro
Tipo de entrada 1


Tipo de entrada 2


Tengo la sensación de que el problema proviene de esta parte del código, pero todavía estoy aprendiendo JSL. Agradecería los comentarios de expertos como usted. ¿Hay alguna forma de que podamos usar directamente la variable de entrada del usuario "desde la fecha" y "hasta la fecha" directamente en SQL?

Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioCreo que debe aplicar el formato para la fecha desde y hasta la fecha que ingresa el usuario, por lo que proporcioné una opción. Sin embargo, creo que el problema principal está en la instrucción where, por lo que proporcioné una opción que debería acercarlo a lo que necesita.
Delete Symbols();
Delete Globals();
nw = new window("Scrap Data", << modal(),
panelbox("Enter Date Range",
hlistbox(
text box("From Date"),
fromdate_teb = text edit box(format(today(),"y/m/d h:m:s"), << set width (100)),
),
hlistbox(
text box("To Date"),
todate_teb = text edit box(format(today(),"y/m/d h:m:s") , << set width (100)),
),
),
panelbox("Actions",
hlistbox(
ok_button = button box("OK",
fromdate = fromdate_teb << get text();
todate = todate_teb << get text();
ok_pushed = 1;),
cancel_button = button box("Cancel", ok_pushed = 0),
)
)
);
Open Database("Generic database connection string",
" SELECT
p.productname,
p.model,
p.family,
TO_DATE (SUBSTR (txntime, 1, 15), 'yyyy/mm/dd hh24:mi:ss') txntime
FROM database p
WHERE
txntime >= to_date('"|| fromdate || "', 'yyyy/mm/dd hh:mi:ss am')
AND txntime < to_date('"|| todate || "', 'yyyy/mm/dd hh:mi:ss am')
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
);
Re: Tener un rango de fechas personalizado en SQL basado en la variable de entrada del usuarioPrueba esto a ver si te funciona
Names Default To Here( 1 );
Delete Symbols();
Delete Globals();
nw = New Window( "Scrap Data",
<<MODAL>= __From_Date__
AND txntime < __To_Date__
",
// End of SQL statement
"New_Table" // New table name --> can be changed as per requirements
)
),
Expr( __From_Date__ ), Parse( "'" || fromdate || "'" ),
Expr( __To_Date__ ), Parse( "'" || todate || "'" )
)
);</MODAL>