在Sqlite中比较字符串的意外结果

时间:2014-04-02 04:29:43

标签: sql sqlite

我想检索结果集,其条件是'uid'的值大于'10000',并且它们都是vchar()类型;

结果是这样的:

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要将其转换为INT,如下所示:

SELECT * FROM IMMessageInfo 
WHERE CAST(uid AS INT) > 10000
ORDER BY CAST(uid AS INT) DESC

答案 1 :(得分:1)

看起来你正在把它变成一个你无法将int与字符串进行比较的字符串。在Python中我跑了:

SELECT * FROM tab WHERE rowid > 9

尝试将其从文字(“”“)更改为int。

要将varchar(s)设置为int,您可以使用以下方法进行转换,以便您根本不更改表格:

CAST(uid AS INT)

您也可以(如@laalto所提到的)将两个字符串与> /<进行比较签署,所以为此我只相信你可以把数字作为一个字符串(但我相信它最多用CAST语句,而不仅仅是引号)注意我可能是错的,虽然我从来没有使用过任何一个只需将ID转换为INT。

如果您对CAST命令感兴趣,可以阅读更多here。 当然还有官方文件here

以下是您的复制和粘贴版本:

SELECT * FROM 'IMMessageInfo' WHERE CAST(uid as INT) > 10000 ORDER BY uid DESC

(完整代码如下(它是python 2.7.6;所以它可能看起来与你使用的有点不同:))

import sqlite3

conn = sqlite3.connect('database.db')
c = conn.cursor()

c.execute('''CREATE TABLE IF NOT EXISTS tab (rowid int, data text)''')

c.execute("INSERT INTO tab (rowid, data) VALUES (10, 'MynameisMike')")
conn.commit()

c.execute("SELECT * FROM tab WHERE rowid > 9")
print(c.fetchone())