【问题标题】:Select Date(String Date)<DATE(Text Column with Date)选择日期(字符串日期)<日期(带日期的文本列)
【发布时间】:2012-08-30 00:42:18
【问题描述】:

我有一个包含文本类型列的表,我在插入查询中使用 NOW() 存储各种设置,包括日期。

现在我想从该表中获取该列在特定日期之前的所有行(例如 2012-09-19)。

通过DATE(date_column)&lt;DATE(NOW()) 比较很容易,但我不知道如何传递特定日期而不是 NOW(),因为输入字符串的日期格式可能不同。

这是一个示例代码:

INSERT INTO table (date_column) VALUES (NOW())

选择时:

SELECT * FROM table WHERE DATE(date_column)<DATE('2012-09-19');

编辑:上面的代码确实有效。我最初错过了日期周围的引号。

【问题讨论】:

  • 您可以自己添加一个答案并接受它,这样人们就可以看到问题已得到回答。
  • 看看 STR_TO_DATE 函数。但是您需要使用 where 子句将行限制为包含日期的行。大概有一个属性名称列。希望你已经从中吸取了教训。两个经典的数据库设计错误合二为一。

标签: mysql date datetime select


【解决方案1】:

避免在列类型周围放置函数 (WHERE FUNCTION(col) ...)。这会降低性能。您想要一个具有域完整性的表,这意味着如果您要存储日期,它是 date 类型。

要选择与您的 date 匹配的记录,只需将您的 YYYY-MM-DD 日期用引号括起来:

SELECT * FROM table WHERE date_column < '2012-09-19'

【讨论】:

    【解决方案2】:

    如果 date_column 确实是 DATE 类型,则不需要对其运行 DATE()。

    还请注意,在 date_column 上运行 DATE() 将阻止 MySQL 使用任何索引,因此您将进行表扫描。

    试试:

    WHERE date_column < '2012-09-19'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多