2012-02-07 8 views
1

私はMySql 5.5を使用しています。mysqlクエリ日時フィールドの精度

私は、半径アカウンティングテーブルで次のクエリを使用しています。

  • Query1を:database.table FROM

    SELECT * WHERE acctstarttimeとacctstoptime BETWEEN framedipaddress = '192.168.1.1' と '2011-09-09';

acctstarttimeacctstoptimeフィールドはYEAR-MT-DY HR:MN:SCとしてフォーマット、タイプdatetimeあります。

query2を使用すると、query1の結果が必ずしも正確ではないことがわかります。query1は何も返されず、間違った行が返されることがあります。

  • QUERY2:

    SELECT * database.table framedipaddress = '192.168.1.1' 注文からacctstarttime DESCのLIMIT 0、400;

は2 datetime、フィールドを照会する別の方法がある、またはそれは、データベースの健全性/データが問題であるのですか?

私のロジックのエラーへのガイダンスは大歓迎です。

ここには私が今質問しているquestionがあります。

+0

あなたは何を表示したいのですか?クエリでは、2011-09-08と2011-09-09の間の真夜中にログインしたすべてのユーザーが表示されます。 –

+0

はい、ヨアヒム、私たちが欲しいものです。 – notmyname

答えて

1

'2011-09-09' = '2011-09-09 00:00:00'したがって、この時間の前にacctstarttimeがあり、この時間後にacctstoptimeを持つアカウントのみを照会しています。

2011-09-09に開始されたアカウントをお探しの場合は、その後、あなたはできます

... 
WHERE 
acctstarttime >= '2011-09-09' AND acctstarttime < '2011-09-10' 

2011-09-09に開始され、終了したアカウントをお探しの場合は、その後の操作を行います。

... 
WHERE 
acctstarttime >= '2011-09-09' AND acctstarttime < '2011-09-10' AND 
acctstoptime >= '2011-09-09' AND acctstoptime < '2011-09-10' AND 

FYIあなたがBETWEENを使用している場合、それは2011-09-10 00:00:00が含まれるので、それが境界を含んでいます。

+0

ベン、例をありがとう。あなたは「境​​界の間に」という意味はどういう意味ですか? – notmyname

+0

BETWEENは、xがminまたはmaxと等しい場合はmin <= x <= max'に相当します。これは、 'date BETWEEN' 2011-09-09 'AND' 2011-09-10''に10日に日付=真夜中( '2011-09-10 00:00:00')のレコード。 –

+0

私はこれのために別の質問を開く必要があるかもしれません - 私は、2つのフィールドの時間と等しいか、その間にある特定の時間を探している場合、それは異なっていますか?だから、たとえば2011-09-09 01:00:00がほしいと思っています。開始時刻と終了時刻の間にあります。御時間ありがとうございます。 – notmyname