嘿,我想选择名称为O'Neil的记录,我如何在Informix中做到这一点。选择具有单引号字符串的记录-informix
select * from name_table where lastname ='O'Neil' - >不起作用。
嘿,我想选择名称为O'Neil的记录,我如何在Informix中做到这一点。选择具有单引号字符串的记录-informix
select * from name_table where lastname ='O'Neil' - >不起作用。
您必须逃脱单引号与另一单引号:
select * from name_table where lastname = 'O''Neil';
使用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""!';
我对技术变革的命题第二个答案。
我不知道你使用了什么技术,但也许你可以使用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或其他技术的用户。