2012-06-04 190 views
4

嘗試這樣選擇時間戳返回所有或0時間戳

select * from table where timestamp_field between 1330560000 and 1336170420 

select * from table where timestamp_field >=1330560000 and timestamp_field<=1336170420 

兩個返回結果爲空。

但這

select * from table where timestamp_field >= 1330560000 

返回所有行

爲了讓事情更荒唐

select * from table where timestamp_field <= 1336170420 

返回結果爲空。

當然,還有前存在時間戳值,之間以及之後1336170420 = 4.may 2012和1330560000 = 1.march 2012

時間戳值的確定,至少phpmyadmin的顯示正確的(人類可讀的)日期時間值。 我通過解析字符串創建時間戳,與

UPDATE table SET timestamp_field = STR_TO_DATE(timestamp_string, '%d.%m.%Y') 

想我失去了一些東西,但無法找到什麼!

+1

是否將您的時間戳存儲爲int或varchar? – Rooster

+0

作爲時間戳。猜測它是int – Prvul

+0

嘗試使用phpmyadmin中的結構選項卡將類型更改爲int,除非您依靠mysql生成當前時間戳,而您並不需要指定時間戳作爲數據類型 – Rooster

回答

6

在MySQL中期望date literals,不是整數的:

使用一個整數(假設他們是從unix新紀元秒),第一次使用MySQL的FROM_UNIXTIME()功能將它們轉換:

SELECT * 
FROM table 
WHERE timestamp_field BETWEEN FROM_UNIXTIME(1330560000) 
          AND FROM_UNIXTIME(1336170420) 

或者否則使用UNIX_TIMESTAMP()將列轉換爲其UNIX表示形式:

SELECT * 
FROM table 
WHERE UNIX_TIMESTAMP(timestamp_field) BETWEEN 1330560000 AND 1336170420 
+3

歡迎您在貝爾格萊德附近喝啤酒和烤肉串;)這爲我節省了一晚 – Prvul

0

爲什麼不使用sql代碼將date_time(timestamp/1000)作爲dateTime進行轉換?你嘗試過嗎?

+0

並不完全瞭解它。例子將是有用的。我真的試過了解mysql如何處理日期和時間,但沒有成功:( – Prvul

+0

ahh eggyal打我,這是我去的地方。 – Fonzy