我正在尝试在特定日期之后选择所有列,但诀窍是“日期”列是varchar
我有这个
SELECT * FROM `users` WHERE STR_TO_DATE(birthday,'%m/%d/%Y') > '10-10-2000'
作为示例,我想选择生日在10/10/2000之后的所有用户,但这只返回所有行。
任何人都知道什么是错的?
答案 0 :(得分:2)
您正在比较数据和字符串。我会使用CAST
:
WHERE STR_TO_DATE(birthday,'%m/%d/%Y') > CAST('2000-10-10' AS date)
另请注意,我更改了第二种格式以匹配mysql所期望的格式。你也可以在这里使用STR_TO_DATE。
答案 1 :(得分:0)
我认为mysql日期通常是yyyy-mm-dd,这意味着你应该把结尾处的字符串更改为2000-10-10。
尝试一下,如果有效,请告诉我。
答案 2 :(得分:0)
我们需要知道字符串生日的格式,现在你说它是例如2001年12月31日。是对的吗?
如果您有多个字符串,请考虑使用相同的STR_TO_DATE格式:
WHERE STR_TO_DATE(birthday, '%m/%/d/%Y') BETWEEN STR_TO_DATE(some_date, '%m/%/d/%Y')
AND STR_TO_DATE(another_date, '%m/%/d/%Y')
更多信息: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date