SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突我遇到了使用包含括號的列名的 SQL Select 語句的問題,因為列名的結束括號最終位於反斜杠旁邊(由於在引號內使用引號:“\!”列名[units] \!" " ) ,這會幹擾周圍的特殊轉義字元(括號和反斜線: \[ ]\ )。
SQL 語句寫在兩個方括號和斜線 ( \[ Select ... ]\ ) 之間,我在整個語句周圍使用 Eval(Parse(Eval Insert())) 來評估變數(按開始日期過濾) ) 。
該命令的結構如下:
評估(解析(評估插入(
「dt = 開啟資料庫(設置,
\[選擇\!"table1\!"。 ...]\
);”
)));
如您所見,column_name[units] 後面的結束括號位於列名稱周圍引號的反斜線旁邊,有效地構成了不需要的特殊轉義字元 ( ]\ )。
- 我嘗試在列名稱周圍使用單引號,並且執行了命令,但沒有檢索資料。當搜尋有關單引號的討論或文件時,我找不到任何內容。
- 我嘗試使用 eval 插入替換字串作為引號(“和 \!”),但沒有成功。
- 我已經瀏覽了一些關於此問題的討論,但尚未找到解決方案。
如果您能就如何解決這種情況、我應該嘗試什麼或我需要閱讀什麼內容提供任何建議,我將不勝感激。
自動化和腳本編寫視窗回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突首先,我建議您不要使用 Eval(Parse())。我認為你應該能夠在字串內使用 ]"
Names Default To Here(1);
str = "\[abc]"]\";
write(str); // abc]"
如果沒有那麼如何用正規表示式取代字串中的方括號“[”“]”?可能會給出一些額外的想法。
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突我嘗試刪除 Eval(Parse()) 並僅建立字串作為開始。特殊的轉義字符似乎仍然造成問題,或者是其他問題。但是,當我刪除特殊轉義字元( \[ ]\ )時,問題就消失了,並且當我將列名稱中的括號更改為圓括號時,問題也消失了。
str = "\[\!"表\!".\!"列[單位]\!"n]\";
感謝您的回覆!
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突您使用的是哪個 JMP 版本?我的 PC 上目前沒有任何資料庫,因此無法使用開放資料庫進行測試,但我可以使用 JMP 表和 New SQL Query() 進行簡單測試
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);
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突我正在研究 JMP 17。我在這裡沒有使用它,因為我是在一些舊腳本的基礎上建立的。
如果有一種方法來處理字串管理,我會全力以赴,但我想我會嘗試更改命令。
謝謝你!
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突如果您已經使用“\[]\”轉義字串,則無需再次執行此操作
Names Default To Here(1);
str = "\["table"."column[unit]"n]\";
Write(str); // "table"."column[unit]"n<BR />
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突不確定我是否理解你的評論,但我認為這是一個誤解(無論如何感謝你的建議)。我只使用“\[]\”轉義一次,第二次出現符號時,這是因為列名的括號末尾是反斜杠,我無法避免使用。
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突是的,這可能只是一些簡單的混亂,因為我將我的評論基於使用 Eval(Parse()) 的原始腳本,最終看起來像
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
回覆:SQL Select 語句中特殊轉義字元(括號和反斜線)與列名中帶引號的括號之間的衝突很高興看到更好的程式碼結構,謝謝!