2012-09-05 28 views
1

我有一个表,我储存的各种设置,包括日期类型文本列,在插入查询使用NOW()选择日期(字符串日期)<DATE(文本列与日期)

现在我想从该表中所有行此列是一个特定的日期(例如,2012-09-19)前。

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

下面是一个示例代码:

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

,并选择当:

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

编辑:上面的代码实际工作。我最初在日期前错过了报价。

+1

您可以自己添加一个答案,并接受它,所以人们可以看到,问题的答案。 – lanzz

+0

看看STR_TO_DATE函数。但是您需要使用where子句将行限制为包含日期的行。可能有一个属性名称列。希望你已经从这一课中吸取了教训。一个这样的两个经典的数据库设计错误。 –

回答

0

避免将围绕列类型(WHERE FUNCTION(col) ...)功能。这会降低性能。你想拥有一个具有域的完整性,如果你存储一个日期的含义上的表,它是一个date类型。

要选择符合您date的记录,只是包住你的YYYY-MM-DD日期报价:

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

如果date_column真正为DATE类型的,你不需要在它上面运行DATE()。

还要注意的是运行在date_column DATE()将防止MySQL的使用任何索引,所以你会做一个表扫描。

尝试:

WHERE date_column < '2012-09-19'