所以,

SELECT * FROM table WHERE col LIKE '%'

将返回所有内容。是否有查询的通配符

SELECT * FROM table WHERE col = '*'

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

谢谢,

有帮助吗?

解决方案

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

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

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

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

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

编辑:我应该澄清LIKE和=仅在普通,单调的字符串比较用法中相似。您应该查看 MySQL手册了解具体信息。它是如何工作的,因为有些情况不同(例如语言集)。

其他提示

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

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

SELECT * FROM table WHERE col RLIKE '.*'

即。正则表达式LIKE。

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);

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

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

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

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

set @p = "ALL";

查询:

select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;

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

从表中选择*,其中col&gt; = 5且col&lt; = 5; //这等于col = 5

从表中选择*,其中col&gt; = 0且col&lt; = 12; //这等于col = any value

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top