評估插入 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') );