根据用户输入变量在 SQL 中自定义日期范围你好,
我在尝试将基于自定义用户输入的变量添加到我的 SQL 代码中时遇到问题。 我正在连接的数据库的问题是日期列是字符。 所以这里是实际的代码,可以很好地处理 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
);下图显示了有关如何在此表中保存日期的示例视图。 列属性是 Character & Nominal。

这是我尝试插入用户输入变量的代码。 此代码返回一个空表。
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
);
回复:根据用户输入变量在 SQL 中自定义日期范围感谢您的帮助。 这非常有效!
回复:根据用户输入变量在 SQL 中自定义日期范围通过更正 test_date 的 WHERE 子句来修复它
AND test_data.test_date BETWEEN TO_DATE('^fromdate^', 'YYYY/MM/DD hh:mi:ss am') 和 TO_DATE('^todate^', 'YYYY/MM/DD hh:mi:ss am')
现在我可以在同一个查询中跨 2 个数据库使用相同的输入日期变量。 一个查询使用数字日期提取数据,另一个 sql 提取日期基于字符的数据。回复:根据用户输入变量在 SQL 中自定义日期范围有没有办法让相同的用户输入文本框在同一脚本中的另一个数据库 SQL 上工作? 唯一的问题是这个新数据库遵循传统/标准数字类型的日期列。 有没有办法将用户输入(fromdate & todate)转换为数字格式月-日-年的二级变量? 基于主要字符的日期用于已解决的问题,次要设置为基于数字日期提取数据。
这是我试图用于从另一个数据库中提取产量数据的 SQL。
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");
回复:根据用户输入变量在 SQL 中自定义日期范围太感谢了。 这个脚本运行良好,我正在获取数据。
回复:根据用户输入变量在 SQL 中自定义日期范围您必须匹配不同日期的舱口。 来自 JMP 的日期有一个日期掩码,而您数据库中的日期有另一个日期掩码。 这应该这样做:
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);回复:根据用户输入变量在 SQL 中自定义日期范围谢谢马克,但不幸的是我在尝试执行时看到以下错误

该错误似乎是由于日期和时间之间的空格串联(以红色突出显示)引起的。 还有其他方法可以在日期和时间之间留出空间吗?
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
另外,我对 where 子句的文本“am”有疑问。 你能告诉我为什么那里需要它吗?

回复:根据用户输入变量在 SQL 中自定义日期范围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
回复:根据用户输入变量在 SQL 中自定义日期范围这个问题最大的原因是我处理的数据库有时间戳是字符格式。 

回复:根据用户输入变量在 SQL 中自定义日期范围你好马克,
也感谢您的回复。 我也有此代码的问题。
这是我的用户在文本框中输入的快照以及我在日志中看到的错误


回复:根据用户输入变量在 SQL 中自定义日期范围你好吉姆,
感谢您的回复,但我仍然遇到问题。 这是我输入的快照和日志中看到的相应错误
输入类型 1


输入类型 2


我感觉问题出在代码的这一部分,但我仍然是一个学习中的 JSL。 我会感谢像您这样的专家的反馈。 有什么方法可以直接在 SQL 中直接使用用户输入变量“fromdate”和“todate”吗?

回复:根据用户输入变量在 SQL 中自定义日期范围我认为您需要强制执行用户输入的起始日期和截止日期的格式,因此我提供了一个选项。 但是,我认为主要问题出在 where 语句中,因此我提供了一个选项,可以让您接近所需的内容。
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
);
回复:根据用户输入变量在 SQL 中自定义日期范围试试这个,看看它是否适合你
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>