2010-01-11 12 views
7

Tüm arasındaki damgaları alın. DATETIME veri türündedir ve "10/1/2009 3:25:08 PM", "10/1/2009 3:30:05 PM", "10/4/2009 3:40:01 PM" gibi değerlere sahiptir. vb .. ben .. böyle bir şey, iki tarih arasındaki zaman damgası alanı husul tüm değerleri seçmek için bir SQL sorgusu yazmak istiyorumMYSQL - <p></p> Bir sütun adı verilen zaman damgası ile MYSQL masası var, tarihleri ​​

:

select timestamp from tablename where timestamp >= userStartDate and timestamp <= userEndDate 

userinput tarihleri ​​zaman kısımlarını olmayacaktır. Bunun için doğru MySQL Query Syntax'i önermek lütfen? Teşekkür

+0

"DATETIME" veri türü var mı? – Quassnoi

+0

evet. Bu doğru – Jake

cevap

14
SELECT timestamp 
FROM tablename 
WHERE timestamp >= userStartDate 
     AND timestamp < userEndDate + INTERVAL 1 DAY 

Bu, her kayıt HAVI seçecektir userStartDate ve userEndDate arasındaki tarih bölümleri, bu alanların DATE türüne (zaman bölümü olmadan) sahip olması koşuluyla.

dizeleri olarak gelen başlangıç ​​ve bitiş tarihleri ​​ise

, herhangi bir formata dönüştürmek için STR_TO_DATE kullanın: tarih veya saat değerleri ile BETWEEN kullanırken en iyi sonuçları elde etmek için

SELECT timestamp 
FROM tablename 
WHERE timestamp >= STR_TO_DATE('01/11/2010', '%m/%d/%Y') 
     AND timestamp < STR_TO_DATE('01/12/2010', '%m/%d/%Y') + INTERVAL 1 DAY 
+0

hmm .. userStartDate "10/01/2009" biçiminde olabilir mi? (mm/gg/yyyy) – Jake

8
SELECT timestamp 
FROM myTable 
WHERE timestamp BETWEEN startDate AND endDate 

, kullanmak gerekir Değerleri istenen veri türüne açıkça dönüştürmek için CAST(). Örnekler: Bir DATETIME değerini iki DATE ile karşılaştırırsanız, DATE değerlerini DATETIME değerlerine dönüştürün. ile bir karşılaştırmada '2001-1-1' gibi bir dize sabiti kullanırsanız, dizeyi DATE'a gönderin.

-http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

+1

Hem "startDate" hem de "endDate", "Jan 11, 2010" ise, bu yalnızca 'timestamp = Jan 11, 2010 00: 00: 00' ile kayıtlar seçecektir, tüm kayıtlara sahip değildir. Tarih bölümünde Jan 11'. – Quassnoi

+0

Haklısınız Quassnoi. Kullanıcı verileriyle mümkün olursa, 24 saat ekleyin (örneğinizde yaptığınız gibi). Kullanıcının sorgudaki dateTime değerlerini kullanacağını varsaymıştım. – Sampson

4

userinput tarihleri ​​damgalarını olmayacaktır.

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19'); 
     -> 1196440219 

Sorgunuzda olabilir:

select timestamp from tablename 
where timestamp >= UNIX_TIMESTAMP(userStartDate) 
and timestamp <= UNIX_TIMESTAMP(userEndDate) 
2

senin iki damgaları arasındaki bir olayı sorgulamak isteyen varsa, başlangıç ​​ve bitiş vardır bir takvim veya bir şey için sen ile zaman damgasına kullanıcı girişi dönüştürebilirsiniz Bir zaman damgası olarak sakladığınız bu

$qry = "SELECT * 
     FROM `table` 
     WHERE '$today_start' >= `event_start` 
      AND '$today_start' <= `event_end`"; 
İlgili konular