2011-04-23 66 views
0

基本查詢問題,但似乎無法得到這個權利。我試圖找到11或12歲的用戶。 DOB是 「11年前的」 存儲爲時間戳Mysql,選擇年齡範圍內的用戶

時間戳是956485529

時間戳 「12年前」 是924863129

查詢:

SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` > 924863129 

似乎只回報用戶那是11歲,而不是12歲。我究竟做錯了什麼?

+2

'dob'列的數據類型是什麼? – 2011-04-23 10:31:00

+0

varchar,你可能會打我。 – stef 2011-04-23 10:34:56

+0

如果可能,請使用TIMESTAMP數據類型 – Alp 2011-04-23 11:15:33

回答

-1

您必須像您說的那樣使用OR,因爲dob列不能同時存在兩個不同的值。

`dob` < 956485529 AND `dob` > 924863129 

或者你可以嘗試時間戳轉換爲一年:

SELECT 
    FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year 
FROM 
    table_name 
WHERE 
    FROM_UNIXTIME(my_unix_timestamp_column, '%Y') = 2009; 

和玩這個(當然,適應你的查詢)

+0

我不認爲這有效:如果'dob' <924863129用戶也可以是一歲。我對嗎? – Marco 2011-04-23 10:37:58

+0

此查詢返回包括12歲以上的所有用戶。 – stef 2011-04-23 10:38:53

-1

我會使用BETWEEN條件:

SELECT * FROM (`users`) WHERE `dob` BETWEEN 924863129 AND 956485529 

此外,我會推薦TIMESTAMP數據類型。有了這一點,你可以做到以下幾點:

SELECT * FROM (`users`) WHERE `dob` BETWEEN DATE_SUB(NOW(), INTERVAL 12 YEAR) AND DATE_SUB(NOW(), INTERVAL 11 YEAR) 

更多的例子在這裏:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

+0

他告訴他使用varchar作爲dob列,所以我認爲這不起作用... – Marco 2011-04-23 10:42:52

+0

我可以更改DOB列的數據類型no probs – stef 2011-04-23 10:51:00

+0

這樣做:) varchar對日期不利 – Alp 2011-04-23 11:15:59

2

我讀了你可以改變你DOB類型。
好了,如果你把它改爲DATETIME(並在該列出生的存儲日期爲DATETIME修改值),你可以試試這個:

select * FROM users 
WHERE (dob>DATE_SUB(NOW(),INTERVAL 13 YEAR)) 
    AND (dob<=DATE_SUB(NOW(),INTERVAL 11 YEAR)); 
0
SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` > 924863129 

它只是迴歸11歲的用戶,因爲:

mysql> select FROM_UNIXTIME(924863129), CURRENT_TIMESTAMP(); 
+--------------------------+---------------------+ 
| FROM_UNIXTIME(924863129) | CURRENT_TIMESTAMP() | 
+--------------------------+---------------------+ 
| 1999-04-23 18:25:29  | 2011-04-23 22:06:50 | 
+--------------------------+---------------------+ 

mysql> select FROM_UNIXTIME(956485529), CURRENT_TIMESTAMP(); 
+--------------------------+---------------------+ 
| FROM_UNIXTIME(956485529) | CURRENT_TIMESTAMP() | 
+--------------------------+---------------------+ 
| 2000-04-23 18:25:29  | 2011-04-23 22:07:19 | 
+--------------------------+---------------------+ 

今天是2011-04-23! 2011-04-23 - 1999-04-23 = 12!

所以你應該給你寫這樣的查詢:

SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` >= 924863129 

希望這有助於!