基本查詢問題,但似乎無法得到這個權利。我試圖找到11或12歲的用戶。 DOB是 「11年前的」 存儲爲時間戳Mysql,選擇年齡範圍內的用戶
時間戳是956485529
時間戳 「12年前」 是924863129
查詢:
SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` > 924863129
似乎只回報用戶那是11歲,而不是12歲。我究竟做錯了什麼?
基本查詢問題,但似乎無法得到這個權利。我試圖找到11或12歲的用戶。 DOB是 「11年前的」 存儲爲時間戳Mysql,選擇年齡範圍內的用戶
時間戳是956485529
時間戳 「12年前」 是924863129
查詢:
SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` > 924863129
似乎只回報用戶那是11歲,而不是12歲。我究竟做錯了什麼?
您必須像您說的那樣使用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;
和玩這個(當然,適應你的查詢)
我會使用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
我讀了你可以改變你DOB類型。
好了,如果你把它改爲DATETIME(並在該列出生的存儲日期爲DATETIME修改值),你可以試試這個:
select * FROM users
WHERE (dob>DATE_SUB(NOW(),INTERVAL 13 YEAR))
AND (dob<=DATE_SUB(NOW(),INTERVAL 11 YEAR));
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
希望這有助於!
'dob'列的數據類型是什麼? – 2011-04-23 10:31:00
varchar,你可能會打我。 – stef 2011-04-23 10:34:56
如果可能,請使用TIMESTAMP數據類型 – Alp 2011-04-23 11:15:33