【问题标题】:Why `"%,2,%" like ",1,2,3,"` return zero?为什么`"%,2,%" like ",1,2,3,"`返回零?
【发布时间】:2016-07-21 04:03:18
【问题描述】:

我的 SQL 没有按预期工作。我发现这是因为其中一个like 子句。

我期待下面的sql

select * from SomeTable Where "%,2,%" like ",1,2,3,";

给出与

相同的结果
select * from SomeTable;

但它实际上什么也没提供。 我无法扩展",1,2,3,",也无法使用find_in_set,因为我使用的是memsql。 那么有没有其他方法可以确定条目是否在逗号分隔的列表字符串中,或​​者我做错了什么?

【问题讨论】:

  • 你不是说select * from SomeTable Where "%,2,%" like ",1,2,3,";吧? & 必须在 like 的右边:select * from SomeTable Where ",1,2,3," like "%,2,%";
  • 因为你把它放回了前面。包含% 字符的匹配模式在LIKE 之后,要比较的值在之前。
  • 在 MemSQL 中执行此操作的最佳方式是通过 JSON。即使您的数据未格式化为 JSON,您也可以执行以下操作: json_array_contains_double(concat('[',column_with_list_of_ids,']'), 2) 以获得与 find_in_set(2, column_with_list_of_ids) 相同的行为。

标签: mysql singlestore


【解决方案1】:

我觉得你的意思是真的

select * from SomeTable Where ",1,2,3," LIKE "%,2,%" ;

给出与SELECT * SomeTable. 相同的结果,因为 ",1,2,3," like "%,2,%" 总是计算为 TRUE,所以。上面的说法确实和

一样
select * from SomeTable;

另一方面在下面的陈述中

select * from SomeTable Where "%,2,%" like ",1,2,3,";

类似于“,1,2,3”的“%,2,%”组件的计算结果始终为 False。这会给你零结果。

我认为你真正想要的是:

 select * from v Where somecolumn like "%,2,%" 

【讨论】:

  • "%,2,%" like ",1,2,3," === false ;
  • ",1,2,3," like "%,2,%" === true
  • 是的@SIDU,我对问题的措辞感到困惑。现在改变了
猜你喜欢
  • 2017-05-03
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多