选择具有单引号-informix字符串的记录

时间:2012-03-19 10:43:53

标签: informix

嘿我想选择名为O'Neil的记录,我怎么能在Informix中做到这一点。

从name_table中选择*,其中lastname ='O'Neil' - >不起作用。

3 个答案:

答案 0 :(得分:2)

你必须用另一个单引号来逃避单引号:

select * from name_table where lastname = 'O''Neil';

答案 1 :(得分:0)

使用Informix,您通常有两种选择。

标准SQL技术(described Michal Niklas)始终有效,是一种简单的推荐解决方案。字符串中单引号的所有外观都加倍:

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

除非您在环境中设置了DELIMIDENT,否则可以使用的替代技术是在字符串周围使用双引号:

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

如果DELIMIDENT启用了分隔标识符,则其含义不同; DBMS将在表中查找名为“O'Neill”的列(因为它是标识符,而不是字符串)。

如果你在字符串中都有两个引号,那么你必须要小心:

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

答案 2 :(得分:0)

我的第二个回答是关于技术变革的提议。

我不知道您使用的技术,但也许您可以使用PreparedStatements。 Jython中的示例(可以使用JDBC驱动程序的Python):

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或其他技术的用户。