挿入 SQL の評価こんにちは、みんな、
ID名が一致する行のみを取得するSQLステートメントを作成しようとしています。
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' ) ) ;"
事前にどうもありがとうございました。
スクリプティングRe: 挿入 SQL の評価userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
先頭および末尾のアポストロフィは、内部のアポストロフィとは異なる方法で処理されます。 ^ の直前と直後と区切り文字列を参照してください。 userlist の項目数が 0 である可能性がある場合は、おそらく意味がないため、クエリを実行する前にそれを確認する必要があります。
他のエスケープ メカニズムを使用してもう少し読みやすくすることができます (html はそれを認識しないため、Web では構文の色分けが間違っています)。
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') );
Re: 挿入 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]+$' ) )
]\";
= または括弧がありませんか?
再度、感謝します!
Re: 挿入 SQL の評価ウェブ上のいくつかのランダムなサイトを見ると、それは正しいように見えます. 私はSQLの専門家ではありません。
Re: 挿入 SQL の評価@ron_horne 、REGEXP_LIKEを試してください
Re: 挿入 SQL の評価ありがとうございました@ErraticAttack 、
うまくいきませんでした。私はこの表現を使用することができました:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Re: 挿入 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 ));
どうもありがとう!
ロン
Re: 挿入 SQL の評価Eval Insert で使用する文字を定義できます。デフォルト以外の文字を使用することをお勧めします
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, "¤"));
Re: 挿入 SQL の評価どうもありがとうございます@jthiこれは完璧です!
Re: 挿入 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", "☺" ));
テスト
SELECT DISTINCT "t1".uid
FROM "テーブル"."テーブル" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
作品
\! がないようです。 Eval Insert のエスケープメカニズム。未使用のキャラクターを選択する必要があります。