【问题标题】:SELECT WHERE some text, contains square bracketsSELECT WHERE 一些文本,包含方括号
【发布时间】:2014-01-14 22:49:49
【问题描述】:

我有一些文本列,格式类似于

 ["some text", ]

让这个列有名字 col1。然后做

SELECT columname FROM table WHERE col1 = '["some text", ]'

我什么也没收到。但随着

SELECT columname FROM table WHERE col1 LIKE '["some text", ]'

我收到所需的数据。我真的不明白为什么会这样。我想使用 =,因为我读了很多 LIKE 慢得多。而且我真的不明白为什么会这样。

统一更新: 根据要求提供更多信息

CREATE TABLE IF NOT EXISTS fulldata (col1 TEXT, data TEXT);

插入我通过 QSqlQuery 做的准备

insertData.prepare("INSERT INTO fulldata(col1 , data) "
                      " VALUES(:col1, :data);");
insertData.bindValue(":col1", currentFilter);

currentFilter 是 [ "2014-01-14 00:00:00", 2 ]

Select I also do using QSqlQuery with prepare

  selectQuery.prepare("SELECT data FROM fulldata WHERE col1 = :col1 ");
  selectQuery.bindValue(":col1 ", strFilter);

strFilter 也是 [ "2014-01-14 00:00:00", 2 ]

我也确实从 Qt 5.1 示例中的“Qt SQL Browser”中进行选择,结果与代码相同。

我的 SQLite 版本 = 3.7.17

【问题讨论】:

  • 得到不同的结果很奇怪。但是,在没有通配符(即 % 符号)的情况下使用 LIKE 确实没有意义,但是如果您这样做,速度应该相似,请检查:stackoverflow.com/questions/404226/…
  • 在任一绑定值中是否有任何前导/尾随空格或类似的空格会导致二进制整理器不匹配?
  • @laalto 不,我仔细检查了..

标签: sql database sqlite


【解决方案1】:

两者都返回正确的结果。

在这里查看:http://sqlfiddle.com/#!5/4c033/4

我假设您遗漏了其他内容,只是您在问题中未提及的一些细节。

是的,LIKE 确实慢了很多。

编辑:

在我的本地机器上尝试过,仍然没有问题。

【讨论】:

  • 当然我的真实表以其他方式调用。实际上,在您的链接上,这两种变体都有效。我使用 SQLite 3,我得到了问题中描述的行为
  • @user3136871 这真的很奇怪。答案已更新。也许你应该用你对 1)表创建的确切陈述来更新你的问题; 2)数据插入; 3)数据选择。我认为这是您遗漏的一些细节,问题中没有提到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多