특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호 사이에 따옴표가 있는 SQL Select 문에서 충돌괄호를 포함하는 열 이름을 사용하는 SQL Select 문에서 문제가 발생했습니다. 열 이름의 끝 괄호가 백슬래시 옆에 오기 때문입니다(따옴표 안에 따옴표를 사용했기 때문: " \!" column name [ units ] \!" " ). 이로 인해 주변의 특수 이스케이프 문자(괄호와 백슬래시: \[ ]\ )와 충돌합니다.
SQL 문은 두 개의 괄호와 슬래시( \[ Select ... ]\ ) 사이에 작성되고 전체 문 주위에 Eval(Parse(Eval Insert()))를 사용하여 변수를 평가합니다(시작 날짜로 필터링).
명령은 다음과 같이 구성되어 있습니다.
Eval(Parse(Eval 삽입(
"dt = Open Database(설정,
\[선택 \!"table1\!".\!"column_name[단위]\!" ... ]\
);"
)));
보시다시피 column_name[units] 뒤에 있는 종료 괄호는 열 이름을 둘러싼 따옴표를 나타내는 백슬래시 옆에 붙어서 원치 않는 특수 이스케이프 문자( ]\ )를 효과적으로 구성합니다.
- 열 이름 주위에 작은 따옴표를 사용해 보았고, 명령은 실행되었지만 데이터가 검색되지 않았습니다. 작은 따옴표에 대한 토론이나 문서를 검색했지만 아무것도 찾을 수 없었습니다.
- 따옴표에 대한 eval insert 대체 문자열( "와 \!" 둘 다)을 사용해보려고 했지만 성공적이지 못했습니다.
- 저는 이 문제에 대한 여러 토론을 살펴봤지만 아직 해결책을 찾지 못했습니다.
이 상황을 어떻게 해결할 수 있는지, 무엇을 시도해야 할지, 무엇을 읽어야 할지에 대한 제안을 주시면 감사하겠습니다.
자동화 및 스크립팅윈도우Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 간의 충돌먼저 Eval(Parse())를 활용하지 않는 것이 좋습니다. 문자열 내부에서 ]"를 사용할 수 있어야 한다고 생각합니다.
Names Default To Here(1);
str = "\[abc]"]\";
write(str); // abc]"
그렇지 않으면 그럼정규식을 사용하여 문자열의 대괄호 "[" "]"를 어떻게 바꾸나요? 몇 가지 추가 아이디어를 알려줄 수도 있습니다.
Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 간의 충돌Eval(Parse())를 제거하고 문자열을 만들어서 시작하려고 했습니다. 특수 이스케이프 문자가 여전히 문제를 일으키는 것 같습니다. 아니면 다른 문제일 수도 있습니다. 하지만 특수 이스케이프 문자( \[ ]\ )를 제거하면 문제가 사라지고 열 이름의 괄호를 괄호로 변경해도 문제가 사라집니다.
str = "\[\!"테이블\!".\!"열[단위]\!"n]\";
답변해 주셔서 감사합니다!
Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 사이의 충돌어떤 JMP 버전을 사용하고 계신가요? 현재 PC에 데이터베이스가 없어서 Open Database를 사용하여 테스트할 수 없지만 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);
Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 사이의 충돌저는 JMP 17에서 작업하고 있습니다. 알겠습니다. 새 SQL 쿼리로 변경하면 이런 문제가 해결될 것 같습니다. 좋은 제안이라고 생각합니다. 여기서는 사용하지 않습니다. 오래된 스크립트를 기반으로 빌드하고 있기 때문입니다.
문자열 관리를 처리할 수 있는 방법이 있다면 그것에 귀를 기울이겠지만 명령을 변경해 볼까 생각합니다.
감사합니다!
Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 간의 충돌이미 "\[]\"를 사용하여 문자열을 이스케이프하고 있다면 다시 할 필요가 없습니다.
Names Default To Here(1);
str = "\["table"."column[unit]"n]\";
Write(str); // "table"."column[unit]"n<BR />
Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 사이의 충돌당신의 코멘트를 잘 이해했는지 모르겠지만, 오해인 것 같습니다(어쨌든 제안해 주셔서 감사합니다). 저는 "\[]\"를 한 번만 사용하여 이스케이프하고 있고, 두 번째로 기호가 나타나는 것은 백슬래시 옆에 괄호가 있는 열 이름 때문인데, 저는 그것을 사용하지 않을 수 없습니다.
Re: 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
Re: SQL Select 문에서 특수 이스케이프 문자(대괄호 및 백슬래시)와 열 이름에 있는 대괄호(따옴표로 묶임) 간의 충돌코드가 더 잘 구조화된 모습을 볼 수 있어서 기쁩니다. 감사합니다!