嘿,我想選擇名稱爲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或其他技術的用戶。