2017-09-01 13 views
6

Tôi lập trình ASP Classic chống lại một cơ sở dữ liệu MySql kết nối với ADODB và MySQL ODBC 5.3 ANSI Driver, nhưng tôi có một số vấn đề khi cài đặt ngày trong nơi của một truy vấn MySql đơn giản, khi truy vấn của tôi là:Sự cố hiếm khi đặt phạm vi ngày ở nơi có truy vấn MySql?

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

các truy vấn lấy dữ liệu trong trang asp, đó là ok, nhưng khi truy vấn là

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

khi tôi in các truy vấn và sau đó sao chép từ html và dán vào Mysql Workbench, sau đó nó lấy dữ liệu, nhưng khi trong trang asp chính nó không lấy bất kỳ dữ liệu nào.

Bất kỳ ý tưởng nào? Tôi nghĩ rằng có lẽ là một cái gì đó với de ODBC Driver.

+0

Hãy thử sử dụng định dạng '2017-08-01' để chỉ định ngày của bạn. Nó có giúp được không? –

+0

Ok vấn đề không phải là khi tôi đặt "nơi mà ngày (calldate) = '20170901'" vấn đề là chỉ khi tôi đặt một loạt các ngày, "nơi ngày (calldate) giữa '20170801' và '20170828'" Nếu tôi chỉ định '2017-08-01' và '2017-08-31' vấn đề vẫn xảy ra, hoặc sử dụng str_to_date, là như nhau. – Artemination

+2

Kiểu dữ liệu nào là 'calldate'? –

Trả lời

6

Nếu bạn muốn sử dụng một định dạng ngày mặc định không mysql bạn phải chuyển đổi đúng

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

nếu không sử dụng định dạng mysql mặc định

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

tôi sẽ không tin tưởng định dạng này: '20170801'

Kể từ calldateDATETIME, điều này sẽ nhanh hơn:

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

Nó sẽ yêu cầu INDEX(calldate)

+0

Nop, chỉ cần làm việc với cast (calldate như ngày) = '20170901', nhưng nếu tôi đặt cast (calldate như ngày)> = '20170901' thì nó không hoạt động. – Artemination

+1

Ẩn 'calldate' bên trong một hàm (' CAST') làm cho nó không thể sử dụng chỉ mục cho hiệu quả. –

Các vấn đề liên quan