Evaluieren Sie SQL und fügen Sie es einHallo zusammen,
Ich versuche, eine SQL-Anweisung zu erstellen, die nur Zeilen mit übereinstimmenden ID-Namen liefert.
Ich habe eine Benutzerliste, die ich in den SQL-String einfügen möchte. Das Problem besteht darin, dass es mit doppelten Anführungszeichen statt mit einfachen Anführungszeichen analysiert wird.
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' ) ) ;"
Vielen Dank im Voraus.
Datenmischung und -bereinigungBetreff: SQL einfügenÄhnliches Beispiel
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", "☺" ));
der Test
SELECT DISTINCT „t1“.uid
VON „Tabellen“. „Tabelle“ „t1“
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
funktioniert
Es scheint kein \! zu geben. Fluchtmechanismus im Eval-Einsatz; Sie müssen einen nicht verwendeten Charakter auswählen.
Betreff: SQL einfügenVielen Dank @jthi Dies ist perfekt!
Betreff: SQL einfügenMit Eval Insert können Sie festlegen, welches Zeichen verwendet werden soll. Ich würde vorschlagen, ein anderes Zeichen als das Standardzeichen zu verwenden. ^ Wenn Sie SQL-Zeichenfolgen auswerten (insbesondere solche mit Regex), verwende ich normalerweise „¤“.
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, "¤"));
Betreff: SQL einfügen@Craige_Hales
Der folgende Regex-Ausdruck funktioniert, wenn die SQL-Anweisung als Zeichenfolge übermittelt wird:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Wenn ich diesen Ausdruck jedoch mit eval insert (sql_str) übermittle, erhalte ich eine Fehlermeldung.
Der Fehler hat mit dem [ zu tun, also gehe ich davon aus, dass Evel-Einfügung Schwierigkeiten mit dem ^ direkt davor hat.
Gibt es eine Möglichkeit, dem ^ zu entkommen?
Im Folgenden wird der genaue Fehler angezeigt.
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE "t1".uid REGEXP '^[A-Za-z0-9]+$'
]\";
write(Eval Insert( sqlstr_uid ));
vielen Dank!
Ron
Betreff: SQL einfügenDanke @ErraticAttack ,
es hat nicht funktioniert. Mir ist es gelungen, diesen Ausdruck zu verwenden:
regexp_substr("t1".uid, '^[A-Za-z0-9]+$')="t1".uid )
Betreff: SQL einfügen@ron_horne , versuchen Sie es mit REGEXP_LIKE
Betreff: SQL einfügenWenn man sich einige zufällig ausgewählte Websites im Internet ansieht, sieht es richtig aus. Allerdings bin ich kein SQL-Experte.
Betreff: SQL einfügenDanke @Craige_Hales , das ist sehr hilfreich.
Die Evaluierungseinfügung funktioniert jetzt korrekt. Im Vergleich zum anderen Fluchtmechanismus ist es viel einfacher. Schade, dass die Software dies nicht so schreibt.
Ich habe ein weiteres Problem mit SQL. Ich möchte nur Zeilen erhalten, deren Wert aus 16 alphanumerischen Zeichen besteht.
Die Längenangabe an sich funktioniert gut. der reguläre Ausdruck nicht
sqlstr_uid =
"\[
SELECT DISTINCT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( (LENGTH ( "t1".uid) = 16) AND ( "t1".uid REGEXP '^[A-Za-z0-9]+$' ) )
]\";
Fehlt mir ein = oder Klammern?
Danke noch einmal!
Betreff: SQL einfügenuserlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"SELECT \!"t1\!".uid
FROM \!"Tables\!".\!"Table\!" \!"t1\!"
WHERE ( \!"t1\!".uid IN ( '^
concatitems(userlist,\!"','\!")
^') )
;";
write(Eval Insert( sqlstr_ ));
Die führenden und nachgestellten Apostrophe werden anders gehandhabt als die inneren Apostrophe; siehe direkt vor und nach dem ^, vs. der Trennzeichenfolge. Wenn die Möglichkeit besteht, dass die Benutzerliste 0 Elemente enthält, sollten Sie dies überprüfen, bevor Sie die Abfrage ausführen, da dies wahrscheinlich keinen Sinn ergibt.
Mit dem anderen Escape-Mechanismus können Sie die Lesbarkeit etwas verbessern (HTML weiß nichts davon, daher ist die Syntaxfärbung im Web falsch):
userlist= {"01E1B5C0651EDA80", "F62B70921920FCBE", "909D35028E2039CE"};
sqlstr_ =
"\[
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '^
concatitems(userlist,"','")
^') );
]\";
write(Eval Insert( sqlstr_ ));
Auch die Verwendung von write() zum Anzeigen des Ergebnisses hilft:
SELECT "t1".uid
FROM "Tables"."Table" "t1"
WHERE ( "t1".uid IN ( '01E1B5C0651EDA80','F62B70921920FCBE','909D35028E2039CE') );