【问题标题】:Select rows for a specific date using TIMESTAMP datatype使用 TIMESTAMP 数据类型选择特定日期的行
【发布时间】:2019-08-22 08:44:24
【问题描述】:

我的数据库中有以下表格:

Student    (Stud_no: string, Stud_name: string)
Membership (Mem_no: string, Stud_no: string)
Book       (book_no: string, book_name: string, author: string)
Iss_rec    (iss_no: integer, iss_date: date, Mem_no: string, book_no: string)

我创建了上述模式定义的表和插入的值。我在 iss_date 中使用了 TIMESTAMP,以便系统自动将当前日期作为 iss_date 的默认值。

现在我必须列出在特定日期(例如 06-08-2019)发行的所有学生和书名、作者

我写了这个查询:

SELECT student.stud_name, book.book_name, book.author,iss_rec.iss_date
FROM student, book, iss_rec, membership
WHERE student.stud_no = membership.stud_no
AND membership.Mem_no = iss_rec.Mem_no
AND book.book_no = iss_rec.book_no
AND iss_date = '2019-08-06'

但它什么也没产生!每当我切断最后一行:AND iss_date = '2019-08-06',它就会产生一个列表。但是,如前所述,我如何获得特定日期的列表? 我不想要时:分:秒,只想要 yyyy-mm-dd。

【问题讨论】:

  • 在 MySQL 8 中,您可以为 datetime 列指定默认值。

标签: mysql sql datetime timestamp


【解决方案1】:

只要把你的查询写成:

AND iss_date >= '2019-08-06'
AND iss_date <  '2019-08-07'

或者更方便:

AND iss_date >= '2019-08-06'
AND iss_date <  '2019-08-06' + INTERVAL 1 DAY

虽然这看起来很长,但它可以更有效地使用索引并且非常通用。

【讨论】:

  • 是的,或者BETWEEN '2019-08-06 00:00:00' AND '2019-08-06 23:59:59'
  • @Strawberry 将依赖于数据类型,例如如果是 DATETIME(6) 那么你需要BETWEEN '2019-08-06 00:00:00' AND '2019-08-06 23:59:59.999999'
  • :-) 是的。分秒必争!
【解决方案2】:

你可以使用DATE函数

AND DATE(iss_date) = '2019-08-06';

【讨论】:

  • 请注意,其他答案要么完全省略函数,要么将它们附加到常量,而不是索引数据。这样效率更高。
【解决方案3】:

请注意,我们停止以这种方式编写查询 ca。 1992.来吧。加入我们。

FWIW,我觉得这更容易阅读......

SELECT s.stud_name
     , b.book_name
     , b.author
     , r.iss_date
  FROM student s
  JOIN membership m
    ON m.stud_no = s.stud_no 
  JOIN iss_rec r 
    ON r.Mem_no = m.Mem_no 
  JOIN book b
    ON b.book_no = r.book_no
 WHERE r.iss_date BETWEEN '2019-08-06 00:00:00' AND '2019-08-06 23:59:59';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2018-09-24
    • 2019-03-22
    相关资源
    最近更新 更多