嘿我想选择名为O'Neil的记录,我怎么能在Informix中做到这一点。
从name_table中选择*,其中lastname ='O'Neil' - >不起作用。
答案 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或其他技术的用户。