基本的查询问题,但似乎无法做到这一点。我正在努力寻找11或12岁的用户。 DOB存储为时间戳
<11>“11年前”的时间戳是956485529 <12>“12年前”的时间戳是924863129查询:
SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` > 924863129
似乎只返回11岁的用户,而不是12岁的用户。我做错了什么?
答案 0 :(得分:2)
我知道您可以更改 dob 类型。
好的,所以如果你把它改成DATETIME(并修改那一列中的值来存储出生日期作为DATETIME)你可以试试这个:
select * FROM users
WHERE (dob>DATE_SUB(NOW(),INTERVAL 13 YEAR))
AND (dob<=DATE_SUB(NOW(),INTERVAL 11 YEAR));
答案 1 :(得分: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
希望这有帮助!
答案 2 :(得分:-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;
并使用此功能(当然,调整您的查询)
答案 3 :(得分:-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