выбрать записи, содержащие строку с одинарной кавычкой -informix - PullRequest
2 голосов
/ 19 марта 2012

Эй, я хочу выбрать записи с именем O'Neil, как я могу это сделать в Informix.

выберите * из name_table, где lastname = 'O'Neil' -> не работает.

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

Вы должны экранировать одинарную кавычку с другой одинарной цитатой:

select * from name_table where lastname = 'O''Neil';
0 голосов
/ 20 марта 2012

Мой второй ответ с предложением технологических изменений.

Я не знаю, какую технологию вы используете, но, возможно, вы можете использовать PreparedStatements. Пример в Jython (Python, который может использовать драйверы JDBC):

db = DriverManager.getConnection(jdbc_url, usr, passwd)
pstm = db.prepareStatement("select * from name_table where lastname=?")
pstm.setString(1, "O'Neil")
rs = pstm.executeQuery()
while (rs.next()):
    print('[%s]' % (rs.getString(1)))

Как вы видите, PreparedStatement использует ? в качестве заполнителя, а затем вы должны заполнить его, используя метод setString(). Это очень полезно, если вам нужно выполнить много подобных операций выбора, вставки и т. Д. Посмотрите документацию по Java6 для этого: http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

Подобные методики могут использоваться пользователем для ODBC или других технологий.

0 голосов
/ 19 марта 2012

В Informix у вас обычно есть два варианта.

Стандартная методика SQL ( описана Михал Никлас ) всегда работает и является простым, рекомендуемым решением.Все появления одинарной кавычки в строке удваиваются:

 SELECT * FROM Name_Table WHERE LastName = 'O'Neill';

Альтернативный метод, который работает, если вы не установили DELIMIDENT в своей среде, заключается в использовании двойных кавычек вокруг строки:

SELECT * FROM Name_Table WHERE LastName = "O'Neill";

Если идентификаторы с разделителями включены в DELIMIDENT, то это имеет другое значение;СУБД будет искать в таблице столбец с именем «O'Neill» (потому что это идентификатор, а не строка).

Если у вас есть обе кавычки в строке, то вы должны бытьосторожно:

SELECT * FROM QuoteTable WHERE Quote = 'He said, "Don''t"!';
SELECT * FROM QuoteTable WHERE Quote = "He said, ""Don't""!';
...