2015-08-17 7 views
0

Я хочу запросить базу данных, где столбец соответствует строке &, эта строка имеет один символ кавычки '. Я не могу выполнить следующий запрос:Querying Postgres database

SELECT * 
from <table> 
where <column>='robocopy'w (ithout)backup.pcap'; 

Причина в том, что для поиска столбца используются одинарные кавычки; Я пробовал двойные кавычки, но не помогал. Я могу передать это, если добавлю лишнюю одинарную цитату перед синглом в строке.

SELECT * 
from <table> 
where <column>='robocopy''w (ithout)backup.pcap'; 

Но мне нужно лучшее решение, поскольку это не практично, чтобы добавить апострофы каждый раз, особенно если они длинные и имеют много одинарных кавычек.

+0

Как запустить это? Из программы? Если да, то какой язык программирования? Вы передаете значение поиска в качестве параметра? Как вы передаете это значение поиска? Откуда вы это взяли? –

+0

Да из скрипта perl, и да значение поиска - это параметр, который я прочитал из файла и поместил его в этот запрос, используя переменную. –

+0

Проблема не в том, что я запускаю ее из сценария, я не могу запустить ее напрямую. Если я смогу ее решить, я могу соответствующим образом изменить сценарий. –

ответ

0

Перед отправкой в ​​базу данных вам нужно избежать строки запроса. Я не могу показать вам, как из-за того, что вы не отправляли код, но если вы выполняете этот запрос непосредственно в консоли psql, вы можете избежать кавычек, поставив все ограничения внутри $$ и $$, как указано в документации [1]. Пример:

SELECT * from <table> where <column> = $$robocopy'w (ithout)backup.pcap$$; 

[1] http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING

+0

Нет, вы бы этого не сделали. Одиночные кавычки сбрасываются путем удвоения их в SQL. '\ '' не имеет особого значения, если Postgres не настроен принимать нестандартные строки (а «стандартные соответствующие строки» по умолчанию уже довольно давно). –

+0

Спасибо chromano за быстрый ответ. Это запись столбца, которую я могу запросить, если передаю частичный путь: выберите путь от

где path = '% (ithout) backup.pcap%'; Путь ----------------------------------------------- ------------------ \ Script_test (special_characters) \ robocopy'w (ithout) backup.pcap Теперь, если я попытаюсь выполнить поиск по всей этой записи, он не запускается и не возвращает никакой ошибки. Если вместо этого я использовал двойные кавычки, она выдает синтаксическую ошибку. –

+0

выберите путь от

где path = '\ Script_test (special_characters) \ robocopy'w (ithout) backup.pcap'; r Обратите внимание, что \ не является символом-escape здесь своей частью строки в таблице, и если я поставлю дополнительную одиночную кавычку перед одной цитатой в моей строке, я могу запустить этот запрос. выберите путь от
где path = '\ Script_test (специальные_характерии) \ robocopy''w (без) backup.pcap'; Путь ----------------------------------------------- ------------------ \ Script_test (special_characters) \ robocopy'w (ithout) backup.pcap (1 строка) –

Смежные вопросы