我正在尝试在当月开始之前检索所有记录。以下是我正在尝试的查询。
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')
仍然没有工作!!
答案 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