Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumIch habe ein Problem mit einer SQL-Select-Anweisung, die Spaltennamen mit Klammern verwendet, weil die schließenden Klammern der Spaltennamen neben Backslashes stehen (aufgrund der Verwendung von Anführungszeichen innerhalb von Anführungszeichen: " \!" column name [ units ] \!" " ) und dies mit den umgebenden speziellen Escape-Zeichen (Klammer und Backslash: \[ ]\ ) in Konflikt gerät.
Die SQL-Anweisung steht zwischen zwei Klammern und Schrägstrichen ( \[ Select ... ]\ ) und ich verwende Eval(Parse(Eval Insert())) um die gesamte Anweisung herum, um eine Variable auszuwerten (Filtern nach einem Startdatum).
Der Befehl ist folgendermaßen aufgebaut:
Auswerten(Analysieren(AuswertenEinfügen(
"dt = Datenbank öffnen( Einstellungen,
\[Wählen Sie \!"table1\!".\!"column_name[units]\!" ... ]\
);"
)));
Wie Sie sehen, steht die schließende Klammer nach column_name[units] neben einem Backslash für das Anführungszeichen um den Spaltennamen und bildet so effektiv ein unerwünschtes spezielles Escape-Zeichen ( ]\ ).
- Ich habe versucht, die Spaltennamen in einfache Anführungszeichen zu setzen. Der Befehl wurde ausgeführt, aber es wurden keine Daten abgerufen. Bei der Suche nach Diskussionen oder Dokumentationen zu einfachen Anführungszeichen konnte ich keine finden.
- Ich habe versucht, mit der eval-Einfügung einen Ersatzstring für ein Anführungszeichen (sowohl " als auch \!") einzufügen, aber ohne Erfolg.
- Ich habe mir mehrere Diskussionen zu diesem Thema durchgelesen, konnte aber noch keine Lösung finden.
Für Anregungen, wie sich die Situation lösen lässt, was ich versuchen sollte oder worüber ich mich informieren sollte, bin ich dankbar.
Automatisierung und SkriptingWindowsBetreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumZunächst würde ich vorschlagen, dass Sie Eval(Parse()) nicht verwenden. Ich denke, Sie sollten in der Lage sein, ]" innerhalb von Zeichenfolgen zu verwenden
Names Default To Here(1);
str = "\[abc]"]\";
write(str); // abc]"
Wenn nicht, dannWie ersetzt man eckige Klammern "[" "]" in einer Zeichenfolge durch reguläre Ausdrücke? könnte einige zusätzliche Ideen liefern.
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumIch habe versucht, Eval(Parse()) zu entfernen und zunächst einfach die Zeichenfolge zu erstellen. Die speziellen Escape-Zeichen verursachen anscheinend immer noch ein Problem, oder es liegt an etwas anderem. Das Problem verschwindet jedoch, wenn ich die speziellen Escape-Zeichen ( \[ ]\ ) entferne, und es verschwindet auch, wenn ich die Klammern im Spaltennamen in runde Klammern ändere.
str = "\[\!"Tabelle\!".\!"Spalte[Einheit]\!"n]\";
Vielen Dank für Ihre Antwort!
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumWelche JMP-Version verwenden Sie? Ich habe derzeit keine Datenbanken auf meinem PC, daher kann ich keine Tests mit Open Database durchführen, aber ich kann einfache Tests mit JMP-Tabellen und New SQL Query() durchführen.
Names Default To Here(1);
dt1 = Open("$SAMPLE_DATA/Big Class.jmp");
Column(dt1, 1) << Set Name("test[na me]");
dt = New SQL Query(
Connection("JMP"),
JMP Tables(["Big Class" => "$SAMPLE_DATA/Big Class.jmp"]),
Custom SQL("\[Select "test[na me]" from "Big Class"]\")
) << Run Foreground;
Close(dt1, No save);
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumIch arbeite an JMP 17. Ich sehe, die Umstellung auf „New SQL Query“ löst diese Probleme wahrscheinlich. Ich denke, das ist ein guter Vorschlag. Ich verwende es hier nicht, weil ich auf einigen älteren Skripten aufbaue.
Wenn es eine Möglichkeit gibt, die Zeichenfolgenverwaltung zu handhaben, bin ich ganz Ohr, aber ich denke, ich werde versuchen, den Befehl zu ändern.
Danke schön!
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumWenn Sie die Zeichenfolge bereits mit "\[]\" maskieren, müssen Sie dies nicht erneut tun.
Names Default To Here(1);
str = "\["table"."column[unit]"n]\";
Write(str); // "table"."column[unit]"n<BR />
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumIch bin nicht sicher, ob ich Ihren Kommentar verstehe, aber ich glaube, es handelt sich um ein Missverständnis (trotzdem danke für den Vorschlag). Ich entkomme der Verwendung von „\[]\“ nur einmal, beim zweiten Mal liegt es daran, dass der Spaltenname mit einer Klammer neben einem Backslash endet, den ich nicht vermeiden kann.
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumJa, es könnte sich nur um eine einfache Verwechslung handeln, da ich meine Kommentare auf Ihrem ursprünglichen Skript stütze, das Eval(Parse()) verwendet, was dann so aussehen wird
Eval(Parse(Eval Insert(
"dt = Open Database( settings,
\[Select \!"table1\!".\!"column_name[units]\!" ... ]\
);"
)));
</CODE>when it maybe should look like</P>
<PRE><CODE class=" language-jsl">Names Default To Here(1);
mydate = "1.1.2000";
dt = Open Database(settings,
Eval Insert("\[Select "table1"."column_name[units]"... ^mydate^]\")
);
</CODE>with some more separation</P>
<PRE><CODE class=" language-jsl">Names Default To Here(1);
mydate = "1.1.2000";
sql_template = "\[Select "table1"."column_name[units]"... ¤mydate¤]\";
sql_str = Eval Insert(sql_template, "¤");
dt = Open Database(settings,
sql_str
);
https://www.jmp.com/support/help/en/18.0/index.shtml#page/jmp/jsl-syntax-rules.shtml
Betreff: Kollision im SQL Select-Statement zwischen speziellen Escape-Zeichen (Klammer und Backslash) und Klammer im Spaltennamen mit Anführungszeichen drumherumEs ist toll, eine bessere Strukturierung des Codes zu sehen, danke!