首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中中间的正确方法

问SQL中中间的正确方法
EN

Stack Overflow用户
提问于 2013-12-21 17:10:49
回答 3查看 255关注 0票数 2

什么是正确的使用方法之间,因为树屋和我的老师对这个问题有不同的答案。

选择1999年至2004年的所有电影。

树屋答:

代码语言:javascript
复制
SELECT * FROM movies WHERE year BETWEEN 1999 AND 2004;

教师回答:

代码语言:javascript
复制
SELECT * FROM movies WHERE year >= 1999 AND year <= 2004;

哪种方法是正确的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-21 17:20:20

两者在技术上都是正确的。然而,正如你的老师所建议的那样,有理由避免使用between。最简单的是,在英语中,这个词是模棱两可的,可以包括终点,也可以不包括终点。事实上,如果你说一条线上的一个点在另外两个点之间,通常意思是这个点与两个端点不重合。

对于整数来说,这是一个小问题。对于其他数据类型,它变得更加重要。一个特别的问题是日期时间。如果数据库中有一个datetime字段,那么下面的内容将不像您所期望的那样工作:

代码语言:javascript
复制
where datetimefield between '2013-01-01' and '2013-01-02'

这将返回2013-01-01年间的所有日期时间值。此外,它将返回一个日期时间值,该值正好位于两个日期之间的午夜。它不会返回2013-01-02年的任何其他值。

我很高兴你的老师认识到了between的缺点。我希望S/他也能解释为什么显式比较法更好。

编辑:

顺便说一句,字符串也会发生类似的情况。所以:

代码语言:javascript
复制
where charfield between 'a' and 'b'

将返回以'a‘和“b”开头的所有值。但不是“ba”或“b1”。写它的一种方法是:

代码语言:javascript
复制
where charfield >= 'a' and charfield < 'c'

重点是。between是一个完全有效的SQL结构。它对所有数据类型都“正确”工作。然而,对于大多数人来说,SQL的正确之处可能并不直观。明确的比较更接近于避免这个问题。

票数 6
EN

Stack Overflow用户

发布于 2013-12-21 17:39:19

这是对这条评论的回答,“它们是唯一的2种方法吗?还是更多的方法?”下面是一些其他的方法。

代码语言:javascript
复制
 where year in (1999, 2000, 2001, 2002, 2003, 2004)
 where year > 1998 and year < 2005

正如戈登的回答所暗示的那样

代码语言:javascript
复制
where date >= {d '1999-01-01'} and date < {d '2005-01-01'}

所有的答案在逻辑上都是等价的。

票数 2
EN

Stack Overflow用户

发布于 2013-12-21 17:25:22

BETWEEN只是为开发者准备的!下面的优化器在识别>=子句时仍然使用BETWEEN和<=。我更喜欢BETWEEN是最好的方法!理由是,它具有很好的可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20721466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档