运营商之间

时间:2017-12-26 14:00:34

标签: sql sql-server sql-like between

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%';

我读到运算符之间的输出包含了子句(包括)之间提到的值。

这里的输出是

ABCD
D

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

这是sql小提琴链接: - http://sqlfiddle.com/#!9/bf5cd5/1/0

2 个答案:

答案 0 :(得分:2)

您没有使用like因此'%'被视为常规字符,您检索的字符串大于'A%',最多为'D%'

'A'< 'A%'

插入'A%'并重试

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

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

答案 1 :(得分:2)

如果您按如下方式插入其他样本数据

insert into timepass values('A%');

现在执行查询

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

然后你可能会理解BETWEEN如何在这里工作。在这种情况下,'%'不是通配符