我有一个包含日期时间列的表。我希望返回所有记录的一个给定的一天,无论时间。或者换句话说,如果我的表只包含以下4条记录,那么如果我限制在2012-12-25,那么只返回第2条和第3条。
2012-12-24 00:00:00 2012-12-25 00:00:00 2012-12-25 06:00:00 2012-12-26 05:00:00
... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'可能比 DATE工作得更好(如果在 date _ column 上有索引的话)。
... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
DATE
永远不要使用像 DATE(datecolumns) = '2012-12-24'这样的选择器——它是性能杀手:
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'
因为这将允许在不计算的情况下使用索引。
剪辑
正如使用者指出的那样,自从2012年最初的答案出现以来,已经出现了 MySQL 的版本,在这些版本中,使用“23:59:59”作为日结束不再安全。更新后的版本应为
SELECT * FROM tablename WHERE columname >='2012-12-25 00:00:00' AND columname <'2012-12-26 00:00:00'
答案的要点,即在计算表达式上避免选择符,当然仍然有效。
你可以使用 %:
%
SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'
SELECT * FROM `table` where Date(col) = 'date'
和 Eugene Ricks 说的很像。如果在 Java8及以上版本中使用 spring data/jpa,则可以使用 plusDays (长时间)将第25天增加到第26天。
例如:
LocalDateTime lowerDateTime=LocalDateTime.parse("2012-12-25T00:00:00"); LocalDateTime upperDateTime = lowerDateTime.plusDays(1l); System.out.println("my lowerDate =="+lowerDateTime); System.out.println("my upperDate=="+upperDateTime);