繁体   English   中英

如何在不包含不需要的值的情况下使用具有多个值的like语句?

[英]How do I use a like statement with multiple values while excluding the values that I don't want?

我的查询如下,但是它将返回包含规则494、788以及其他任何规则的记录。 如何限制它返回仅包含这两个规则的记录?

select * from result where rules like '%494%'
AND rules like '%788%'
AND tradedate >= '2014-01-01'

规则列中的样本记录如下所示:| 406 | 407 | 759 | 398 | 399 | 381 | 702 |

我想返回所有具有494和788的记录,但是如果它们具有任何其他规则ID,则不需要它们。

这样的事情(假设您有要排除的规则列表):

SELECT *
FROM result
WHERE rules IN ('494', '788', ...etc...)

如果您使用

... rules LIKE '%494%' AND rules LIKE '%788%'

这只会与规则,如“494788”返回记录

如果您使用

... rules LIKE '%494%' OR rules LIKE '%788%'...

这将返回诸如“ 1494”和“ 4944”之类的规则,因为您双方都有通配符。

如果这些表被规范化,这将容易得多。 由于尚不清楚将多个规则应用于特定记录时规则是否以任何特定顺序出现,因此您要考虑所有可能的组合。 这应该给您所有结果:

SELECT * 
FROM result 
WHERE rules IN ('|494|', '|788|', '|494|788|', '|788|494|')
AND tradedate >= '2014-01-01'

如果您需要查询的不止一个或两个规则的组合,那么如果不将它们存储在每行一个规则的单独的规范化表中,则会遇到很多困难。 在当前形式中,您要检查n ^ 2个可能的组合,其中n是要检查的规则数。

select * from result where (rules like '%494%'
OR rules like '%788%')
AND tradedate >= '2014-01-01'

OR将确保分别应用这两个规则,并且括号将确保仍将这两个规则与交易日期进行比较。

如果您不希望使用诸如14942或27885之类的规则中的任何内容,请从适当的一侧删除%符号(对于任何数量的字符(包括无字符),百分号都是通配符),或使用适当的运算符(在这种情况下,可能=)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM