我想从给定mysql中特定记录日期的表中选择行
SELECT * from TABLENAME WHERE FROM_DATE='06/11/2012'
我没有得到任何有用的东西。
首先,您应该使用标准日期格式Y-m-d
- 否则您必须进行一些令人讨厌的查询,并且排序是一个真正的 b*tch。
使用标准日期格式,您可以轻松地执行以下操作:
SELECT * FROM tablename WHERE from_date > '2012-06-11'
DATE
比较很可能是您想要的。如果您的 from_date 列的数据类型为DATE
,那么如果您这样做,您的代码应该是安全且健壮的:
WHERE from_date = STR_TO_DATE('06/11/2012', '%m/%d/%Y')
@Repox 指出,您可以考虑将日期文字采用规范格式“2012-06-11”。这是真的,如果你能做到的话。但是如果您需要,STR_TO_DATE 会为您完成。这里有 %x 个转换项的列表。http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
如果您使用DATETIME
数据类型,请注意:比较比看起来更复杂。 DATETIME
项目就像浮点数:如果其中一个完全等于另一个,那只是巧合。那是因为它们代表时间上的片刻(毫秒),而不仅仅是几天。
假设您的 from_date 列具有DATETIME
类型,您应该使用
WHERE from_date >= STR_TO_DATE('06/11/2012', '%m/%d/%Y')
AND from_date < STR_TO_DATE('06/11/2012', '%m/%d/%Y') + INTERVAL 1 DAY
这将在您想要的那一天及时捕捉所有时刻,直到但不包括第二天的第一时刻。
如果您的 from_date 项目表示为字符串,请不厌其烦地将它们转换为DATE
或DATETIME
数据类型。严重地。你的结果会好很多。
SELECT * from TABLENAME WHERE FROM_DATE='2012/06/13'
如果你使用DATE()
mysql的功能会更好
SELECT * FROM tablename WHERE DATE(from_date) > '2012-06-11'
因为,如果您将 from_date 的数据类型设置为 TIMESTAMP 或 DATETIME,那么当您直接使用“>”符号时,有时它不会返回正确的结果