运营商之间

Between operator

create table timepass
(
    first varchar(50)
);

insert into timepass values('ABCD');
insert into timepass values('A');
insert into timepass values('Dx');
insert into timepass values('D');

SELECT first
FROM timepass
WHERE first BETWEEN 'A%' AND 'D%';

我读到 between 运算符的输出包括 between 子句中提到的值(包括)。

这里的输出是

ABCD
D

这里不包括A,但包括D。我无法理解这种行为。有人可以解释一下吗?

这里是 sql fiddle link :- http://sqlfiddle.com/#!9/bf5cd5/1/0

您没有使用 like,因此“%”被视为常规字符,您正在检索大于 'A%' 到 'D%'

的字符串

'A' < 'A%'

插入 'A%' 然后重试

也许这会带来您想要的结果

SELECT first
FROM timepass
WHERE first between 'A' and 'D'

如果按如下方式插入其他示例数据

insert into timepass values('A%');

现在执行查询

SELECT first
FROM timepass
WHERE first between 'A%' and 'D%'

那么你可能会明白 BETWEEN 在这里是如何工作的。在这种情况下,“%”不是通配符