2012-10-04 210 views
0

如何從使用時間戳的數據庫字段中進行選擇,當我從php獲得的所有日期都是日期時?php日期和mysql時間戳比較

$date = 2012-10-03; 

類似:

"select value from table where completed_date = $date" 

僅completed_date價值真的像「2012年10月3日2點16分10秒」我真正想的是,是相同的所有值一天作爲$日期,並且查詢幾乎忽略此查詢的時間戳的時間方面。那可能嗎?

謝謝!

+0

請注意,您還需要指定一個像'$日期=「你'$ date'變量2012- 10-03';'(注意關於數據值的sinlge引號。 –

+0

@NullUserException請讓你的答案成爲答案,這樣我就可以標記它了。 – ackerchez

回答

1

由於您提供的日期已經是一個有效的MySQL郵戳,它可以是簡單的:

SELECT ... WHERE DATE(completed_date)='2012-10-03' 
+0

這將起作用,但不會使您能夠使用該字段上的任何索引。 –

+0

是的,但由於日期不是以原生格式存儲的,因此對於涉及部分日期匹配的任何事情,您都必須執行類似操作或使用字符串操作。 –

0

使用DATE_FORMAT格式化MySQL的日期:

"select value from table where DATE_FORMAT(completed_date,'%Y-%m-%d') = $date" 
+0

我不會投票,但是你不應該以這種方式使用函數。 – Kermit

+0

如果這是錯誤的,請告訴我爲什麼,我喜歡學習 –

+0

您將無法利用completed_date字段上的任何索引 –

1

你需要嘗試這樣的事情,

"select value from table where completed_date like '$date%'" 
+0

如果您正在查找與您的時間戳相同的日期(不是時間戳+ 24小時或其他),所有條目都是索引友好的答案。 –

+0

雅,我猜想OP只是在尋找場地的日期部分,因爲他/她想'忽略時間方面'。 –

0

如果你的數據庫字段是一個Unix時間戳,你會用FROM_UNIXTIME詳細here

如果您的數據庫字段(col)是datetime類型,那麼您應該使用SELECT ... WHERE col LIKE '2012-10-03%'

如果你的數據庫字段(col)是date類型的,你會SELECT ... WHERE col = '2012-10-03'

0

如果completed_date是一個時間戳字段,不是VARCHAR,那麼你可以做這樣的事情:

"SELECT value FROM table WHERE completed_date>=? AND completed_date<?" 

並綁定中的參數:

$date="2012-10-03"; 
$start=date("Y-m-d G:i:s",strtotime($date)); 
$end =date("Y-m-d G:i:s",strtotime($date.' +1day')); 
+2

我更喜歡使用'BETWEEN'子句而不是'x> = y AND x <= z'。箭頭總是讓我困惑。 – NullUserException

+0

@NullUserException但是,「BETWEEN」不包含在內。通過「2012-10-03」會搜索「2012-10-03 00:00:00」。 – Kermit

+0

@njk男人說,它是[含](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators。html#operator_between) – NullUserException

0

我喜歡coder1984的回答爲一體,沒有按不需要模式更改。但是,如果這是您通常要查詢數據的方式,那麼我會建議在數據庫中添加一個字段作爲日期字段。

+0

作爲評論? – Kermit

+0

@njk不,如果OP想要考慮進行數據庫模式更改,則更多意思是作爲備用答案。如果沒有,我認爲coder1984有最好的解決方案。 –

+0

考慮到我在他之前回答,我給自己信用= p – Kermit