SELECT * FROM logs;
idDate accNum idMonths dDay dYear dType transacted_money dat
4 862065095 9 8 2015 Withdraw 2323 09/08/2015
5 862065095 9 8 2015 Deposit 333 09/08/2015
请帮我解决这个问题我想获取数据,以便我可以在PHP中操作它们。但首先我想在mysql中测试我的查询,以及它的结果。没有结果。为什么?我的查询错了吗?
嗯,我猜我的第一张照片已被删除,实际查询已完成
SELECT * FROM logs WHERE dat BETWEEN '9/8/2015' AND '9/13/2015';
答案 0 :(得分:3)
您的日期是字符串,而不是实际的mysql日期,因此它们会通过 STRING 规则进行比较,这意味着:
'9/1/15' > '10/1/15' --> TRUE (september comes after october?)
因为9
在字符串上下文中大于1
。
请注意
'2015-09-01' > '2015-10-01' -> FALSE
修复你的表以将这些varchar字段转换为正确的date
/ datetime
字段,或者你会做愚蠢的黑客攻击
WHERE str_to_date(varcharfield, ...) BETWEEN '2015-09-01' AND '2015-10-'01'
请注意上面示例中日期的格式。 MySQL期望/要求日期为yyyy-mm-dd
或yyyy-mm-dd hh:mm:ss
格式,以将它们解析为日期。其他任何东西都只是一个字符串。
mysql> select '9/1/15' > '10/1/15', '2015-09-01' > '2015-10-01';
+----------------------+-----------------------------+
| '9/1/15' > '10/1/15' | '2015-09-01' > '2015-10-01' |
+----------------------+-----------------------------+
| 1 | 0 |
+----------------------+-----------------------------+
1 row in set (0.00 sec)
答案 1 :(得分:2)
尝试使用以下
WHERE DATE_FORMAT( `createdon` , '%Y-%m-%d' ) <= '2014-07-31'
AND DATE_FORMAT( `createdon` , '%Y-%m-%d' ) >= '2014-07-01'
31-07是结束日期,01-07是开始日期
答案 2 :(得分:0)
正如一些用户所指出的那样,这是一种非常糟糕的方法,因为你的日期是字符串并且不遵循mysql格式化日期的正确方式,但是因为你要求它这是一种方法:
SELECT * FROM test
WHERE
STR_TO_DATE(my_date, '%m/%d/%Y') BETWEEN '2015-09-09' AND '2015-09-12';
P.S。要使用BETWEEN
,您必须提供yyyy-mm-dd
或yyyy-mm-dd hh:mm:ss
等日期。