基本的查询问题,但似乎不能正确回答。我正在努力寻找11岁或12岁的用户。将道布存储为时间戳
"11年前“的时间戳是956485529
"12年前“的时间戳是924863129
查询:
SELECT * FROM (`users`) WHERE `dob` < 956485529 AND `dob` > 924863129似乎只返回11岁的用户,而不是12岁的用户。我做错了什么?
发布于 2011-04-23 21:20:34
我读到您可以更改您的道布类型。
好的,如果您将其更改为DATETIME (并修改该列中的值以将出生日期存储为DATETIME),您可以尝试这样做:
select * FROM users
WHERE (dob>DATE_SUB(NOW(),INTERVAL 13 YEAR))
AND (dob<=DATE_SUB(NOW(),INTERVAL 11 YEAR));发布于 2011-04-23 22:11:38
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希望这对你有所帮助!
发布于 2011-04-23 18:33:58
您必须像您所说的那样使用OR,因为道布列的不能同时具有两个不同的值。
`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;并尝试这个(当然,调整您的查询)
https://stackoverflow.com/questions/5763676
复制相似问题