无法在月初之前检索记录 - Mysql

时间:2014-08-21 02:50:13

标签: mysql sql database date

我正在尝试在当月开始之前检索所有记录。以下是我正在尝试的查询。

select Date_of_receipt from str where 'Date_of_Receipt' < DATE_FORMAT((curdate() - dayofmonth(curdate()) + 1), '%d/%m/%Y')

我在09/08/2014和09/08/2012有两个Date_of_receipt。它应该检索09/08/2012条目。但它的空白。我执行了,

select DATE_FORMAT((curdate() - dayofmonth(curdate()) + 1), '%d/%m/%Y')

它于2014年8月1日返回。所以,任何人都可以告诉我哪里出错了并且有责任。

编辑1:尝试

select Date_of_receipt from str where DATE_FORMAT(STR_TO_DATE(Date_of_Receipt, '%d/%m/%Y'), '%d/%m/%Y') < DATE_FORMAT((curdate() - dayofmonth(curdate()) + 1), '%d/%m/%Y')

仍然没有工作!!

1 个答案:

答案 0 :(得分:2)

Date_Of_Receipt周围有单引号。因此,MySQL将其解释为字符串。这是第一个问题。所以,这是一个部分修复:

select Date_of_receipt
from str
where Date_of_Receipt < DATE_FORMAT((curdate() - dayofmonth(curdate()) + 1), '%d/%m/%Y')

仅对字符串和日期常量使用单引号。

下一个问题是您应该将日期与日期进行比较,而不是字符串。假设Date_of_Receipt实际上存储为日期/日期时间,那么只需执行:

select Date_of_receipt
from str
where Date_of_Receipt < curdate() - interval dayofmonth(curdate()) day

据推测,你实际上是指<=或类似的东西。从当前日期减去当月的当天,即可显示上个月的最后一天。

编辑:

如果存储Date_of_Receipt - 恐怖恐怖 - 作为字符串,则需要将其转换为日期。将日期存储为字符串是不好的业力。毕竟,你会看到当你尝试比较它们时会发生什么。试试这个:

select Date_of_receipt
from str
where str_to_date(Date_of_Receipt, '%d/%m/%Y') < curdate() - interval dayofmonth(curdate()) day