Postgresql
您如何取消來自函式的“類似 C 的反斜杠轉義序列”?
這將取消
\n\n
序列。SELECT E'\n\nFOO';
但是如果同樣的序列來自一個函式,你會怎麼做。
CREATE FUNCTION asdf() RETURNS text AS $$ SELECT '\n\nFOO'::text $$ LANGUAGE 'sql';
Pg 似乎沒有向 SQL 公開其字元串解析/詞法分析。它有
quote_literal
等,但似乎沒有相反的情況。所以我不知道另一種方法可以做到這一點,而無需突破 PL 或編寫簡單的 C 擴展。例如
CREATE OR REPLACE FUNCTION pyunquote(quoted text) RETURNS text AS $$ return quoted.decode("string-escape") $$ LANGUAGE plpythonu;
然後
test=# SELECT pyunquote('\n\nAAA'); pyunquote ----------- + + AAA (1 row)
但請注意,這使用 Python 的字元串轉義規則,而不是 PostgreSQL 的。
要獲取 PostgreSQL 的規則,您可以使用以下非常不安全的方法並信任該函式傳遞給您的任何內容:
DO LANGUAGE plpgsql $$ DECLARE x text; BEGIN EXECUTE format('SELECT E''%s''', '\n\nFOO') INTO x; RAISE NOTICE 'value is "%"', x; END; $$;