将当前年份时间戳与mysql存储的时间戳进行比较

时间:2016-12-30 16:08:16

标签: php mysql

我想从数据库中返回添加的行"今年" (今年)。每行的创建日期存储为十进制格式的时间戳。

我想象的一种方法是获取当前年份的时间戳范围,然后只选择适合此范围的行。我有谷歌,但没有成功。 有没有办法比较给定年份与数据库存储的时间戳?

2 个答案:

答案 0 :(得分:1)

通常的模式就像你描述的那样......将裸列与范围进行比较。

我们可以使用表达式来推导范围的开始和结束。在这种情况下,年初和明年年初。

修改

如果creation_date列的数据类型为DATE,DATETIME或TIMESTAMP格式,那么,作为示例:

 WHERE t.creation_date >= DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 0 MONTH
   AND t.creation_date <  DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH

我们可以使用SELECT语句

测试表达式
SELECT DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL  0 MONTH AS d1
     , DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH AS d2

返回

d1          d2          
----------  ----------
2016-01-01  2017-01-01  

在&#34;裸&#34;上进行比较column是一种模式,允许MySQL在合适的索引上使用范围扫描操作(如果有的话)。

如果我们将列包装在一个函数中,那将迫使MySQL为表中的每一行计算函数。所以我不推荐这种模式。但作为一个例子:

 WHERE YEAR(t.creation_date) = YEAR(NOW()) 

修改

编辑过的问题说created_date列存储为十进制数据类型。

只要存储的值是 canonical (也就是说,以后日期的值将始终比较为&#34;大于&#34;任何较早日期的值)。 。

然后应用相同的模式...将裸列与范围的开始和结束进行比较。

 WHERE t.decimal_col  >=  beginning_of_this_year
   AND t.decimal_col  <   beginning_of_next_year

只需要提供表示begin_of_this_year和beginning_of_next_year的十进制值(或返回小数值的表达式)。

如果没有更准确地定义存储的值以及这些值所代表的日期,我无法给出更具体的示例。

答案 1 :(得分:0)

您可以使用str_to_date函数

 STR_TO_DATE('31/12/2016 8:06:26 AM', '%d/%m/%Y %r') 

和过滤器

where year( STR_TO_DATE('31/12/2016 8:06:26 AM', '%d/%m/%Y %r') ) = 2016