我有一个基本查询,它将从两个表中提取记录,标准是日期等于或大于今天。它将仅为今年取得一切。它看起来像这样:
ds_postmeta.meta_value >=Date_Format(CURDATE(), ('%m/%d/%Y'))
有什么想法吗?我以前从未见过这个
答案 0 :(得分:1)
date_format
获取日期并将其转换为字符串,这意味着您要比较两个字符串,强制进行词典比较,而不是比较实际日期。相反,您应该使用str_to_date
将meta_value
转换为将其与当前日期进行比较之前的日期:
STR_TO_DATE(ds_postmeta.meta_value, '%m/%d/%Y') >= CURDATE()
答案 1 :(得分:1)
这实际上取决于meta_value
中存储的内容。
如果其中有'mm/dd/yyyy'
格式的日期值的字符串表示,则比较存在问题,因为这将是逐字符比较。如果“月份”不相等,则比较将以结果结束它检查年份。正如所写的那样,比较说,两年前的12月是今天之后(例如2015年5月)。
要将其作为实际“日期”值进行比较,您确实需要将该字符串转换为实际的DATE
,然后与另一个DATE
进行比较,如下所示:< / p>
STR_TO_DATE(ds_postmeta.meta_value,'%m/%d/%Y') > CURDATE()