7

我正在尝试在 Postgresql 中编写一个解析文件路径的 sql 函数。我只想返回文件名。

我无法在函数中获取准确的文本字符串。

这是功能:

Function:  job_page("inputText" text)
DECLARE
    $5 text;

BEGIN
    $5 = quote_literal("inputText");
    return $5;
END

当我运行这个:

select job_page('\\CAD_SVR\CADJOBS\7512-CEDARHURST ELEMENTARY SCHOOL\7512-20.DWG')

我得到这个结果:

"E'\\CAD_SVRCADJOBSé2-CEDARHURST ELEMENTARY SCHOOLé2-20.DWG'"

Postgresql 将斜线后面的某些字符解释为特殊字符。

我该如何逃脱?

4

2 回答 2

12

您应该使用转义字符串语法:

select E'\\CAD_SVR\\CADJOBS\\7512-CEDARHURST ELEMENTARY SCHOOL\\7512-20.DWG';

\CAD_SVR\CADJOBS\7512-CEDARHURST ELEMENTARY SCHOOL\7512-20.DWG

这在任何情况下都有效。

或者您可以set standard_conforming_strings=on使用:

select '\CAD_SVR\CADJOBS\7512-CEDARHURST/ ELEMENTARY SCHOOL\7512-20.DWG';

\CAD_SVR\CADJOBS\7512-CEDARHURST/ ELEMENTARY SCHOOL\7512-20.DWG

quote_literalexec仅当您将在 pl/pgsql 函数中构造调用查询时才应使用函数。要在客户端中构建查询,您应该使用客户端的库引用函数,例如PQescapeStringConn在 libpq 或pg_escape_stringPHP 中。但最好的选择是使用准备好的语句并使用字符串作为参数,这消除了所有引用并且也更安全

于 2010-06-17T09:32:15.313 回答
1

你必须用另一个 \ 来逃避 \

IE \\

您可以通过将 standard_conforming_strings 选项设置为 on 来关闭此行为。默认情况下它是关闭的,但是这个默认值会在未来一段时间内改变。

我暂时推荐双反斜杠。

于 2010-06-15T21:20:18.537 回答