2017-09-01 109 views
6

我对MySQL数据库编程经典ASP与ADODB和MySQL ODBC 5.3 ANSI驱动程序连接,但设置在一个简单的MySQL查询的地方,当我查询的日期时,我有一些问题:在MySql的查询中设置日期范围时发生的罕见事件?

Select * from cdr where date(calldate)='20170901' 

查询检索的ASP页面的数据,那好吧,但是当查询

Select * from cdr where date(calldate) between '20170801' and '20170828' 

当我打印查询,然后我从HTML复制并粘贴到MySQL工作台,然后检索数据,但是当在asp页面本身不检索任何数据。

任何想法?我想也许是与ODBC驱动程序的东西。

+0

尝试使用格式'2017-08-01'指定日期。它有帮助吗? –

+0

好的问题不是当我把“where date(calldate)='20170901'”问题是我把一个日期范围,“日期(calldate)在'20170801'和'20170828'之间”如果我指定'2017-08-01'和'2017-08-31'这个问题仍然会发生,或者使用str_to_date,是一样的。 – Artemination

+2

什么数据类型是'calldate'? –

回答

6

如果你想使用不MySQL的默认日期格式,你必须将正确

Select * from cdr where date(calldate)=str_to_date('20170901','%Y%m%d') 

否则使用MySQL的默认格式

Select * from cdr where date(calldate)='2017-09-01' 
2

我不相信这样的格式:'20170801'

由于calldateDATETIME,因此速度会更快:

WHERE calldate >= '2017-08-01' 
     AND calldate < '2017-08-01' + INTERVAL 28 DAY`. 

它需要INDEX(calldate)

+0

Nop,只要与cast(calldate as date)='20170901'一起工作,但如果我把cast(calldate as date)> ='20170901',那么它就不起作用。 – Artemination

+1

在函数内部隐藏'calldate'('CAST')使得不可能使用索引来提高效率。 –