2010-11-22 7 views
0

を使用することができますかどうかを知る必要があり、私のクエリです:のような間とは、SQLで一緒に、またはより良い何かここで

SELECT count(*) 
    FROM table_testcase_execution 
WHERE campaign_session_id = any(SELECT campaign_session_id 
            FROM table_campaign_session 
            WHERE campaign_session_name = 'sitename') 
    AND timestamp BETWEEN "1288929643485" AND "1289010305536" 

これはうまく動作しますが、問題は、彼ら私はこれらにLIKEを使用しなければならないことです3桁の余分な数字が含まれています(これはタイムスタンプと3桁の数字です)。

したがって、私はPHPでstrtotimeを使用しており、これらをデータベースで一致させようとしていますが、余分な3桁が含まれています。このSQLをやり直したり、これらのタイムスタンプごとにLIKE句を追加する方法はありますか?

 "1288929643485" AND "1289010305536" 

クエリのタイムスタンプが文字列なので、あなただけのSUBSTRING()で、不要な3桁の数字を

SELECT count(*) 
    FROM table_testcase_execution 
    WHERE campaign_session_id = any(SELECT campaign_session_id 
            FROM table_campaign_session 
            WHERE campaign_session_name = 'sitename') 
    AND timestamp between LIKE "1288929643%" AND "1289010305%" 
+0

DATETIMEに列を変更できますか? – Stephen

答えて

2

(... @のtimestamp1と@のtimestamp2がクエリに供給され、それぞれのタイムスタンプ値と仮定) :

select count(*) from table_testcase_execution 
where campaign_session_id = any(
    SELECT campaign_session_id 
    FROM table_campaign_session 
    WHERE campaign_session_name = 'sitename') 
AND timestamp >= "1288929643000" AND timestamp <= "1289010305999" 

timestampの列のインデックスと一緒にすると、パフォーマンスが向上します。

0

のようなものを切り捨てることはできませんか?

select count(*) 
from table_testcase_execution 
where campaign_session_id = any(SELECT campaign_session_id FROM table_campaign_session WHERE campaign_session_name = 'sitename') 
AND timestamp between SUBSTRING(@timestamp1, -3) AND SUBSTRING(@timestamp2, -3) 

3余分な桁が000から999の範囲とすることができると仮定すると、あなたはこのような何かを行うことができ

関連する問題