【问题标题】:How to select all records year to date in oracle?如何在oracle中选择年初至今的所有记录?
【发布时间】:2015-03-11 14:22:42
【问题描述】:

我有一个带有字段 create_date (unix-timestamp) 的表。如何选择过去 12 个月的所有记录?

谢谢 托马斯

【问题讨论】:

  • 过去 12 个月还是年初至今?这些是不同的东西......
  • 哦,是吗?有什么区别?
  • 截至今天(2015 年 3 月 11 日),通常 YTD=2015 年 1 月 1 日 - 2015 年 3 月 11 日。过去 12 个月 = 2014 年 2 月 1 日 - 2014 年 2 月 28 日,甚至可能是 2014 年 3 月 12 日 - 3 月2015 年 11 月。人们喜欢定义这些不同的方式。
  • 谢谢,那我搞混了。

标签: oracle timestamp


【解决方案1】:

您可以尝试以下方法。请记住,Unix 时间戳表示自 1970 年 1 月 1 日午夜以来经过的秒数:

SELECT * FROM mytable
 WHERE date'1970-01-01' + NUMTODSINTERVAL(create_date, 'SECOND') >= TRUNC(ADD_MONTHS(SYSDATE, -12));

我猜create_date 的值在 1,400,000,000 左右。

【讨论】:

    【解决方案2】:

    您需要将 UNIX Timestamp 转换为日期格式,然后使用 ADD_MONTHS 甚至减去它们。

    -- SQL 查看和验证日期

    select ADD_MONTHS(MYTABLE.CREATE_DATE, -12) from MYTABLE;
    

    -- 用于回答问题的 SQL

    select *
    from MYTABLE
    where MYTABLE.CREATE_DATE > ADD_MONTHS(SYSTIMESTAMP, -12);
    

    【讨论】:

    • 所以你的意思是 select * from mytable where create_date > ADD_MONTHS(TO_CHAR(SYSTIMESTAMP,'DD/MM/YYYY'), -12) ?
    • 这是一种奇怪的做法......你为什么要转换成char?
    • 抱歉,转换为 CHAR 是我测试的痕迹。现在已更正和更新。
    猜你喜欢
    • 2018-04-25
    • 2023-04-01
    • 1970-01-01
    • 2020-05-03
    • 2016-11-08
    • 1970-01-01
    • 2019-06-07
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多