2016-04-17 13 views
0

私はSQLを使用して2つの日付間のクエリですか?

SELECT stime,etime FROM clientbike 

type = datetime 

結果

stime    | etime 
-------------------------------------------- 
2016-04-18 00:00:00 | 2016-05-18 00:00:00 
-------------------------------------------- 
2016-04-05 00:00:00 | 2016-06-05 00:00:00 
-------------------------------------------- 
2016-04-03 00:00:00 | 2016-07-03 00:00:00 

clientbike今、私は機能を検索したいされているテーブルがあります。

すべてのクエリ結果が0を見つけたが、私は3 ...

をしたいが

検索クエリ> = AND AND < =

SELECT stime,etime FROM clientbike WHERE 
    stime >= '2016-04-25 00:00:00' AND 
    etime <= '2016-04-26 00:00:00' 

間違っ

No Result Found... 

str_to_date

SELECT stime,etime FROM clientbike WHERE 
    STR_TO_DATE(stime, '%Y-%m-%d') BETWEEN '2016-04-25 00:00:00' AND '2016-04-26 00:00:00' AND 
    STR_TO_DATE(etime, '%Y-%m-%d') BETWEEN '2016-04-25 00:00:00' AND '2016-04-26 00:00:00' 
012との間で使用して

No Result Found... 

間違っ

SELECT stime,etime FROM clientbike WHERE 
    stime BETWEEN '2016-04-25 00:00:00' AND '2016-04-26 00:00:00' AND 
    etime BETWEEN '2016-04-25 00:00:00' AND '2016-04-26 00:00:00' 

間の検索クエリを使用して検索クエリ

間違っ

No Result Found... 

誰かがこの動作を説明できますか?フォーマットは、あなたのフィールドがvarchar秒であり、ないdatedate sが比較することができ、通常のようなので、あなたがそれらを比較することはできませんことを意味し

+1

'D-M-Y'を日付を書くことについて非常に注意してください。あなたがどこに住んでいるかによって、違うことを意味します。日付「Y-m-d」を書いてください。 – Scopey

+0

はい、しかし出口データの日付コピー... –

+0

私はy-m-dを使用しません。私はd-m-Yのみを使用します –

答えて

2
stime  | etime 
------------------------ 
15-04-2016 | 31-06-2016 

dateタイプフィールドを使用していた場合、フォーマットはYYYY-MM-DDとなり、標準比較はうまくいきます。これらの文字列を日付に変換して、正しく比較する必要があります。

アクションの

ベストコースは、この目的のために正しいデータ型を使用するようにフィールドを変更することであり、それはあなたが日付のように、あなたの列を変換する必要がありDATE

+0

が見つかりましたが、私はdmY –

+0

mysqlの日付の値を自動変更して 'YYYY-MM-DD'を表示する場合... –

+0

日付の形式を変更する方法dd-mm-YYYY –

0

ある

STR_TO_DATE(stime, '%Y-%m-%d') 

これを試してみてください。

SELECT stime,etime FROM clientbike 
    WHERE STR_TO_DATE(stime, '%Y-%m-%d') BETWEEN '2016-04-01' AND '2016-04-17' 
    AND STR_TO_DATE(etime, '%Y-%m-%d') BETWEEN '2016-05-01' AND '2016-07-26' 

または

I nは、データベースは、varchar型から日付または日時

EDITあなたSTIMEとETIME列はそれほどまでにデータ型を変更タイプの文字列である私はあなたの質問に見ることができます

sqlfiddle example

+0

いいね!私は彼らが既存の構造に変更を加えることを熱望しているように見えないので、OPがこの方法に行くと思う。 –

+0

この更新された日付を使用してみてください。結果が得られます。日付が検索されて日付が検索され、値が一致しないために結果がありません –

+0

sqlfiddleの例を確認してください –

0

まず最初にその列を変更しますデバッグのために以下のクエリをチェックすることができます。

以下のクエリをコピーしてmysqlで実行するだけで、このクエリが開始日から終了日までcountエントリの数を返すことがわかります。次の2つの方法でこれを達成することができます

、これは選択@FromDate@ToDate両方のように、すべての日付範囲のシナリオをカバーしている1

SET @FromDate := '2016-04-1' 
    SET @ToDate := '2016-04-30' 

    SELECT COUNT(*) FROM clientbike 
    WHERE stime >= @FromDate AND etime <= @ToDate 


オプションは、テーブルの開始と終了の列内にあります。

オプション2

 SET @FromDate := '2016-04-1' 
    SET @ToDate := '2016-04-30' 
    SELECT count(*) FROM clientbike WHERE stime BETWEEN @FromDate AND @ToDate AND etime BETWEEN @FromDate AND @ToDate 
関連する問題