评估插入 SQL大家好,
我正在尝试生成一个 SQL 语句,该语句将仅带来具有匹配 id 名称的行。
我有一个用户列表,我想将其插入 SQL 字符串中。问题是它用双引号而不是单引号解析它。
Names default to here (1);<BR />// got the userlist from a data table using dt:users << get as matrix<BR />userlist = {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE", "B339888591CF1346"};
<BR />// define an SQL string to host the list of user ids
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( ^userlist^) )
;";
Eval Insert( sqlstr_logs );
// i get the following non working SQL string
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( {\!"01E1B5C0651EDA80\!", \!"F62B70921920FCBE\!", \!"909D35028E2039CE\!", }) )
;"
// i would like to get the following working SQL statement
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '01E1B5C0651EDA80' , 'F62B70921920FCBE' , 'F62B70921920FCBE' ) ) ;"
预先非常感谢您。
数据混合和清理回复:评估插入 SQL类似的例子
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( "the test ☺sqlstr_uid☺ works", "☺" ));
考试
选择不同的“t1”.uid
来自“表”。“表”“t1”
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
作品
似乎没有\! Eval Insert 中的转义机制;你需要选择一个未使用的角色。
回复:评估插入 SQL非常感谢@jthi太棒了!
回复:评估插入 SQL您可以定义使用 Eval Insert 的字符,我建议使用默认字符以外的其他字符 ^ 如果您正在评估 sql 字符串(尤其是带有正则表达式的字符串),我通常使用“¤”
Names Default To Here(1);
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
Write(Eval Insert(sqlstr_uid, "¤"));
回复:评估插入 SQL@Craige_Hales
当以字符串形式提交 sql 语句时,以下正则表达式有效:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
然而,当使用 eval insert (sql_str) 提交此表达式时,我收到错误。
该错误与 [ 有关,所以我假设 evel insert 之前的 ^ 遇到困难。
有没有办法逃避 ^ ?
下面显示了确切的错误。
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( sqlstr_uid ));
非常感谢!
罗恩
回复:评估插入 SQL谢谢@ErraticAttack ,
它不起作用。我确实设法使用了这个表达:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
回复:评估插入 SQL@ron_horne ,尝试 REGEXP_LIKE
回复:评估插入 SQL随便看了一下网络上的一些网站,看起来是对的。 不过我不是 SQL 专家。
回复:评估插入 SQL谢谢@Craige_Hales ,这非常有帮助。
eval 插入现在可以正常工作。相对于其他逃生机制来说,要容易得多。可惜软件不是这么写的。
我还有一个关于 SQL 的问题。我只想获取值由 16 个字母数字字符组成的行。
长度声明本身效果很好。正则表达式没有
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( (LENGTH ( "t1".uid) = 16) AND ( "t1".uid REGEXP '^[A-Za-z0-9]+$' ) )
]\";
我缺少 = 或括号吗?
再次感谢!
回复:评估插入 SQLuserlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
前导撇号和尾随撇号的处理方式与内部撇号不同;请参阅 ^, 与分隔符字符串之前和之后。 如果用户列表有可能有 0 个项目,您应该在运行查询之前检查这一点,因为它可能没有任何意义。
您可以使用其他转义机制使其更具可读性(html 不知道它,因此网络上的语法着色是错误的):
userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"\[
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '^
concatitems(userlist,"','")
^') );
]\";
write(Eval Insert( sqlstr_ ));
使用 write() 显示结果也有帮助:
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '01E1B5C0651EDA80','F62B70921920FCBE','909D35028E2039CE') );