duanke3985 2016-12-30 16:08
浏览 231
已采纳

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

I want to return from database just the rows added "this year" (current year). Creation date for each row is stored as a timestamp in a decimal format.

One method that i imagine is to get the timestamp range for current year and then select just the rows that fit this range. I have google it but with no success. Is there a way to compare the given year against that database stored timestamp?

  • 写回答

2条回答 默认 最新

  • doulangbi6869 2016-12-30 16:17
    关注

    The usual pattern is as you describe... comparing the bare column to a range.

    We can use an expression to derive the start and end of the range. In this case, the beginning of the year and beginning of the next year.

    EDIT

    If datatype of creation_date column is DATE, DATETIME, or TIMESTAMP format, then, as an example:

     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
    

    We can test the expressions with a SELECT statement

    SELECT DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL  0 MONTH AS d1
         , DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH AS d2
    

    returns

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

    Doing the comparison on the "bare" column is a pattern that will allow for MySQL to use a range scan operation on a suitable index, if one is available.

    If we were to wrap the column in a function, that would force MySQL to evaluate the function for every row in the table. So I don't recommend this pattern. But as an example:

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

    EDIT

    The edited question says created_date column is stored as a decimal datatype.

    As long as the stored values are canonical (That is, the value of a later date will always compare as "greater than" the value of any earlier date) ...

    then the same pattern applies... compare the bare column to the start and end of the range.

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

    Just need to provide decimal values (or expressions that return the decimal values) representing the beginning_of_this_year and beginning_of_next_year.

    Absent a more precise definition of what values are stored, and what dates those values values represent, I can't give a more specific example.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 关于无人驾驶的航向角
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了