2017-09-01 3 views
6

私はADODBとMySQL ODBC 5.3 ANSIドライバーとの接続MySQLデータベースに対してクラシックASPをプログラミングするんだけど、単純なMySQLのクエリのどこに日付を設定するときに、私のクエリがあるときに私は、いくつかの問題を持っている:日付を設定する際のまれなインシデントは、MySqlのクエリのどこにあるのですか?

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

クエリがASPページ内のデータを取得するには、[OK]をthatsのが、私は、クエリを印刷して、私は、MySQL WorkbenchにHTMLからコピーして貼り付けた場合、クエリは

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

あるとき、それは、データを取得するが、ときaspページ自体は、何もデータを取得しません。

すべてのアイデア?私は多分ODBCドライバで何かと思います。

+0

があなたの日付を指定するには、フォーマット '2017-08-01'を使用してみてください必要になります。助けてくれますか? –

+0

私が「date(calldate)= '20170901'」と置いたときの問題は、「20170801」と「20170828」の間の日付(calldate)がどこにあるのかという問題です。 '2017-08-01'と '2017-08-31'はまだ問題が発生しているか、str_to_dateを使用しても同じです。 – Artemination

+2

どのデータ型が 'calldate'ですか? –

答えて

6

あなたが適切に

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

がそうでなければ

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

MySQLのデフォルトの形式を使用する変換しなければなりませんmysqlのないデフォルトの日付書式を使用したい場合は、私はこのフォーマットを信頼しないでしょう。'20170801'

calldateDATETIMEなので、これは速くなります:

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

それはINDEX(calldate)

+0

Nopは、キャスト(dateとしてのcalldate)= '20170901'で動作しますが、キャスト(dateとしてのcalldate)> = '20170901'を入力すると動作しません。 – Artemination

+1

関数( 'CAST')の中で' calldate'を隠すことは効率のためにインデックスを使うことを不可能にします。 –

関連する問題