当前位置: 首页 > 面试题库 >

MySQL SELECT WHERE日期时间匹配日期(不一定是时间)

公西博实
2023-03-14
问题内容

我有一个包含datetime列的表。我希望无论何时都返回给定日期的所有记录。换句话说,如果我的表仅包含以下4条记录,那么如果我限制为2012-12-25,则仅返回第二和第三条记录。

2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00

问题答案:

永远不要 使用像这样的选择器DATE(datecolumns) = '2012-12-24'-它是性能杀手:

  • 它将DATE()为所有不匹配的行(包括那些行)计算
  • 它将无法使用索引进行查询

使用起来更快

SELECT * FROM tablename 
WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

因为这将允许索引使用而无需计算。

编辑

正如Used_By_Already所指出的那样,自2012年最初回答以来,出现了一些MySQL版本,在该版本中使用‘23:59:59’作为结束日不再安全。更新后的版本应为

SELECT * FROM tablename 
WHERE columname >='2012-12-25 00:00:00'
AND columname <'2012-12-26 00:00:00'

答案的要旨,即在计算出的表达式上避免选择器,当然仍然存在。



 类似资料:
  • 问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将

  • 可设定日期与时间。 自动设定 连接至PlayStation®Network时,自动取得日期与时间的信息。 手动设定 可手动设定年/月/日/时/分/秒(12小时制时亦可设定AM/PM)。 轻触[OK]后,即会自00秒开始计数。 手动设定(通过互联网) 轻触[手动设定(通过互联网)],可连接互联网取得日期与时间的信息。

  • 介绍 日期时间包是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装,封装对象如下: 日期时间工具 DateUtil 针对日期时间操作提供一系列静态方法 DateTime 提供类似于Joda-Time中日期时间对象的封装,继承自Date类,并提供更加丰富的对象方法。 FastDateFormat 提供线程安全的针对Date对象的格式化和日期字符串解析支持。此对象在实际使

  • 你可以查看或更改 Navicat Monitor 的日期和时间设置。若要配置此设置,请前往“配置”->“日期和时间”。 列出 Navicat Monitor 的日期和时间信息。你可以启用“使用 24 小时制”来使用 24 小时制系统。

  • 您可以在 M600 上手动设置日期与时间,或与手机和网络自动同步日期与时间*。 更改日期与时间设定 导航至 Settings(设定)应用程式,找出并轻触 System(系统)。 轻触 Date & time (日期和时间)。 轻触 Automatic date & time(自动同步日期与时间)。 选择并轻触您想使用的方式: 与手机同步 与网络同步:如果您选择该选项,您还可以选择采用24小时制或1

  •  日期与时间设定 可调整日期与时间的设定。 日期与时间 日期显示方式 时间显示方式 时区 夏令时间