19

所以,

SELECT * FROM table WHERE col LIKE '%'

将返回一切。查询是否有通配符

SELECT * FROM table WHERE col = '*'

显然*不起作用,我只是把它放在那里表明我想要一个通配符。我从中选择的列包含 1 到 12 之间的整数,并且我希望能够选择具有特定数字的所有记录或具有通配符的所有记录。

谢谢,

4

8 回答 8

15

LIKE 与 = 基本相同,除了 LIKE 允许您使用通配符。

这两个查询将返回相同的结果:

SELECT * FROM table WHERE col LIKE 'xyz';
SELECT * FROM table WHERE col='xyz';

LIKE 查询中没有“%”,它实际上与“=”相同。

如果您在整数列上进行选择,则应考虑使用 IN() 或 BETWEEN 运算符。听起来您有两个单独的条件应该在代码中处理,而不是在查询中处理,因为您的条件要求您至少需要两种不同类型的查询。

编辑:我应该澄清 LIKE 和 = 仅在正常的、单调的字符串比较用法中相似。您应该查看MySQL 手册以了解其工作原理的详细信息,因为在某些情况下它并不相同(例如语言集)。

于 2009-04-29T21:43:39.933 回答
8

如果要选择所有内容,为什么要附加 WHERE 子句?只需有条件地将其关闭,而不是将通配符放入其中。

于 2009-04-29T21:40:28.350 回答
7

使用 LIKE 的原因是因为 = 不提供通配符支持。否则不会有 LIKE 的理由

于 2009-04-29T21:39:20.850 回答
1
SELECT * FROM table WHERE col RLIKE '.*'

即正则表达式LIKE。

于 2009-04-29T21:40:25.153 回答
0

假设您的查询是参数驱动的,case 语句可能是合适的

select * from mytable
where col like case when @myvariable is null then % else myvariable end

如果@myvariable您不想要一个值,则为 null ,否则它将使用您传入的整数值。

于 2009-04-29T21:42:35.583 回答
0

zombat 的回答很棒,但我只在他的回答中注意到您正在选择整数。他提到了 IN() 和 BETWEEN()。下面是使用这些语法的示例,以及整数字段的其他一些选项。

SELECT * FROM table WHERE col = 1;
SELECT * FROM table WHERE col BETWEEN 1 AND 12;
SELECT * FROM table WHERE col BETWEEN 6 AND 12;
SELECT * FROM table WHERE col <= 6;
SELECT * FROM table WHERE col < 6;
SELECT * FROM table WHERE col >= 6;
SELECT * FROM table WHERE col > 6;
SELECT * FROM table WHERE col <> 6;
SELECT * FROM table WHERE col IN (1,2,5,6,10);
SELECT * FROM table WHERE col NOT IN (1,2,5,6,10);
于 2009-04-29T22:43:47.403 回答
0

我在为报告构建存储过程时遇到过这种情况以下是我的解决方案,希望这是您的想法:)

set @p = "ALL";

询问:

select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;
于 2015-05-12T09:50:46.320 回答
0

如果您的值在 (1,12) 范围内,则:

select * from table where col>=5 and col<=5; //这等于col=5

select * from table where col>=0 and col<=12; //这等于 col=any 值

通过适当地选择 2 个参数,同一行可以产生两种效果。当我需要一个准备好的语句时,我遇到了类似的问题,它应该以两种不同的方式工作,要么检查列中的特定值,要么完全忽略该列。

于 2015-10-26T22:46:23.960 回答