2012-10-03 200 views
0

我試圖創建一個列表,我被困住了。 因此,我有一個表,其中包含一個包含日期的Unix時間戳的start_date字段。 我試圖查詢表格並從時間戳中提取日期,那麼任何具有該日期的結果都將在該日下等。幾乎就像列表視圖中的事件一樣。SQL查詢時間戳日期字段,並按日期分組所有結果

我正在用PostgreSQL和PHP來做這件事。不知道如何編寫該查詢。但是,我發現PostgreSQL中的extract,date_part等函數仍然不確定如何獲取正確的查詢。

任何幫助或例子,將不勝感激。

+0

爲什麼在pgsql具有完美的時間戳數據類型時使用UNIX時間戳? –

+0

與發佈FROM_UNIXTIME()的距離非常近,直到看到該標籤爲止;/ – wesside

回答

0

最簡單的從Unix時間戳提取date /最快的方式:

SELECT to_timestamp(my_epoch_ts)::date; 

實施例:

SELECT to_timestamp(1349118398)::date 

結果:

2012-10-01 

這是利用to_timestamp()函數,然後是cast to date: ::date

更多細節及在this recent related answer末鏈接。

+0

你們倆都給了我需要的部分去做我需要的東西。你幫助了這個問題,Arjun舉了一個寫它的例子。我只能接受一個,因爲我確實說過查詢的幫助,我會接受你的答案。 –

+0

@Pjack:你總是可以高興,所以阿爾瓊也得到了一些滿足。 –

1

date('d M Y', $timestamp);應該給你特定的UNIX時間戳的日期,月份和年份。

如果您希望在列表視圖中使用start_date字段(升序或降序)對數據庫順序運行select查詢,並在$ row中獲取它。然後,你處理由一個記錄一個內循環,這樣做:

$prevDate = ' '; 
$currentDate = ' '; 

for each ($row) //however it goes 
{ 
    $currentDate = date('d M Y',$row['start_date']); 
    if($prevDate != $currentDate) 
    { 
     echo "Day : ".$currentDate; 
    } 
    echo $row['other-fields']; 
    $prevDate = $currentDate; 
} 

然而,PostgreSQL支持date數據類型,並使用應該在你的最終簡化事情。

http://www.postgresql.org/docs/8.2/static/datatype-datetime.html

+0

謝謝,但不一定必須完全相同才能生效。這就是爲什麼我試圖獲得實際日期,因爲它是在一個時間戳,它將下降到毫秒。他們中的任何一個都不會是確切的時間,但他們可能在同一天。這就是爲什麼我想按日期提取日期和列表(組),然後是當天發佈的所有內容。 –

+1

他們不需要相同。這也可以,因爲我比較了只保存日期的$ currentDate和$ prevDate(已使用date('d M Y',$ timestamp)'從unix時間戳轉換而來)。因此,秒或小時的差異不會影響代碼的執行。並且'date()'PHP函數爲您提供了更好的靈活性,以便您也希望顯示UNIX時間戳。 http://php.net/manual/en/function.date.php –

+0

酷,thx的解釋。 –