SQL自定义和评估/解析(和\!\!\!...)嗨!
我做了很多查询,这些查询不能使用JMP查询构建器,而必须用SQL Custom编写。
但是,由于我也想概括我的代码,因此我必须集成许多eval / inserts和\ !!
这是一个例子:
代码尚未推广
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"SELECT \!"t1\!".lot_id
FROM \!"public\!".\!"v_test_run\!" \!"t1\!"
WHERE ( ( ( \!"t1\!".test_run_timestamp >= '2020-11-01 15:25:11' ) ) ) ;"
)
) << Modify;
包含日期的通用代码:
gbStr = Eval Insert("
New SQL Query(
Connection(
\!"ODBC:blabla\!"
),
QueryName( \!"v_test_run\!" ),
CustomSQL(
\!"SELECT \!\!\!"t1\!\!\!".lot_id
FROM \!\!\!"public\!\!\!".\!\!\!"v_test_run\!\!\!" \!\!\!"t1\!\!\!"
WHERE ( ( ( \!\!\!"t1\!\!\!".test_run_timestamp >= '^date_deb^' ) ) ) ;\!"
)
) << Modify;
");
Eval( Parse( gbStr ) );还有其他方法可以使我免于这些麻烦吗\!\!\!符号?
在复杂的脚本上,真的很难处理和调试!
谢谢
脚本编写回复:SQL自定义和评估/解析(和\!\!\!...)概述了一些选项本文,我建议从Eval(Eval Expr())开始,然后包装需要用Expr()替换的每一块。它可能看起来像这样:
Eval( Eval Expr(
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"\[SELECT "t1".lot_id
FROM "public"."v_test_run" "t1"
WHERE ( ( ( "t1".test_run_timestamp >= ']\" || datevariable || "\[' ) ) ) ;]\"
)
) << Modify
) );
回复:SQL自定义和评估/解析(和\!\!\!...)非常感谢你! 我已经阅读过本文并尝试过,但在掌握此评估(eval expr(expr))时仍然遇到困难
回复:SQL自定义和评估/解析(和\!\!\!...)我将使用定界符\ [和] \在字符串中包含双引号。
date_deb = "to_date('01-Mar-2019', 'dd-mon-yyyy')";
gbStr = Eval Insert("\[
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"SELECT "t1".lot_id
FROM "public"."v_test_run" "t1"
WHERE ( ( ( "t1".test_run_timestamp >= ^date_deb^ ) ) ) ;"
)
) << Modify;
]\");
write(gbstr);
Eval( Parse( gbStr ) );
输出:
New SQL Query(
Connection(
"ODBC:blabla"
),
QueryName( "v_test_run" ),
CustomSQL(
"SELECT "t1".lot_id
FROM "public"."v_test_run" "t1"
WHERE ( ( ( "t1".test_run_timestamp >= to_date('01-Mar-2019', 'dd-mon-yyyy') ) ) ) ;"
)
) << Modify;回复:SQL自定义和评估/解析(和\!\!\!...)我同意,这种语法只有在您理解后才显而易见,即使那样也会造成混淆。查看这个愿望清单项目引入一个Eval Expr First()函数,也许那会更直观?
回复:SQL自定义和评估/解析(和\!\!\!...)我喜欢走另一条路,避免直观的eval解析组合,因为我发现它们对于其他目的非常有用。
我经常遇到复杂的查询(由其他工具(例如SQL开发人员)在普通SQL中构建)。 我需要修改一些变量。
随附的示例显示了它如何与大类数据表一起使用,如何以类似的方式对所有ODBC连接起作用。
只需简单地准备我的Connection字符串(此处未使用)和SQL Query即可,并将字符串变量指定给“ New SQL Query” .object。
我使用“ assign”(而不是“ =”),因为它适用于大型查询和代码折叠。
而且,我也更灵活地使用开放数据库功能或以其他方式处理SQL。
通常,在普通的SQL中不需要双引号(并且我也尽量避免使用双引号),除非您具有带空格等的名称,例如“ Big Class”。
Names Default To Here( 1 );
cdt = Open( "$Sample_Data\Big Class.jmp" );
age = "15";
// define custom SQL with placeholder
Assign( sql_str, "SELECT t1.name, t1.age, t1.sex, t1.height,
t1.weight
FROM \!"Big Class\!" t1
WHERE ( ( ( t1.age IN ( &age ) ) ) ) ;" );
// fill placeholder
Substitute Into( sql_str, "&age", "15" );
// execute query
dt_age = New SQL Query( Version( 130 ), Connection( "JMP" ), JMP Tables( cdt ), QueryName( "aged" || "_" || age ), CustomSQL( sql_str ) ) << Run;
回复:SQL自定义和评估/解析(和\!\!\!...)太好了,那真的非常有用! 由于我们刚刚创建了数据库,而我是该创建的主要参与者,因此我确保没有表名或变量名带有括号或空格,因此应简化此概括。