2013-05-09 118 views
0

目前我正在做一些事情。C#SQL查询多个LIKE

using (var IDatabaseQuery = Lightningbolt.GetDatabaseManager().CreateQueryObject()) 
     { 
      IDatabaseQuery.SetQuery("SELECT * FROM catalogue_baseitems WHERE name LIKE '%hc2_%' OR name LIKE '%hc3_';"); 
      data = IDatabaseQuery.FetchTable(); 
     } 

这就是我使用,我想用hc2_和hc3_开头的所有项目,但是,我只得到开始hc2_的项目。在SQL中也包含以hc3_开头的项目,但在执行查询时不显示。我错了什么?

回答

3

如果你想开始与hc2_hc3_项目,你需要做出两个改变:

  1. 在不使用%开始,并且
  2. 因为它掩盖为“任何一个字符”而逃避下划线

尝试这样:

SELECT * FROM catalogue_baseitems WHERE name LIKE 'hc2\_%' OR name LIKE 'hc3\_%' 

注意%hc2_%将匹配任何下面的例子:

  • abchc2X(因为领导%和下划线将匹配X
  • hc23(因为下划线将匹配3
  • ...等等
2

你想要的结果包含在一开始,你需要使用条款这样'hc2_%'hc3_%hc2_hc3_

由于您使用的是'%hc2_%',因此您正在获得hc2_的结果,此操作会返回字符串中任何位置包含hc2_的任何字符串。

查询更改这个

IDatabaseQuery.SetQuery("SELECT * FROM catalogue_baseitems WHERE name LIKE 'hc2\_%' OR name LIKE 'hc3\_%';"); 

不要忘了underscore(_),这是一个wildcard字符。

1

你缺少第二百分号:'%hc3_%'

+0

谢谢,这表现很好。我做了一些肮脏的快速工作,所以我一定忘记了第二个百分号。 – 2013-05-09 20:41:02