面对一个奇怪的问题。我已经在我的数据库中存储了一个失效日期 Varchar (由于日历插件)。我现在必须检查表中的过期项目。 所以我编写了这个SQL,首先将varchar(string)转换为日期格式,然后与当前时间进行比较。
SELECT date_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y') as dateSale
FROM tbl_salestemplate where date_format(str_to_date(discountEndDT,'%m/%d/%Y'),'%m/%d/%Y')>DATE_FORMAT(NOW(),'%m/%d/%Y')
现在这给了我结果,但仅限于截至2013年的到期日。我在2014年到期的日期即使超过今天也不会返还。
不确定我做错了什么。如果我运行一个独立查询来获取所有到期日期,我会得到所有日期,包括2014年到期年份的日期,以预期的m/d/y
格式。
独立查询是:
SELECT *FROM tbl_salestemplate Wheredate_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y')
我哪里出错了?有人可以纠正吗?
谢谢。
答案 0 :(得分:1)
尝试此查询:
SELECT date_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y') as dateSale
FROM tbl_salestemplate
where str_to_date(discountEndDT,'%m/%d/%Y')>NOW()
;
甚至是这样:
SELECT discountEndDT as dateSale
FROM tbl_salestemplate
where str_to_date(discountEndDT,'%m/%d/%Y')>NOW()
;
因为转换date_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y')
实际上将字符串m / d / yyyy转换为日期,然后转换回相同的字符串m / d / yyyy。
看到此演示:http://www.sqlfiddle.com/#!2/59536/5
您的查询不是比较真实日期,而是比较格式的字符串:m / d / yyyy,其中m
是月份数。
看看演示中第二个查询的结果
例如,日期“03/15/2014”比“12/09/2013”更好,但字符串“03 ...”小于“12 ......”,因此您会得到意想不到的结果。