Oracle查询去年1月1日到去年今天的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle查询去年1月1日到去年今天的数据相关的知识,希望对你有一定的参考价值。

Oracle怎么查询从去年1月1日到去年今天这个时间段里的数据?求各位大佬搭救
要求是动态的,比如今天是查2017.1.1到2017.8.31的,明天就要改成2017.1.1到2017.9.1的了

不会用函数吗? 其实你就是想查去年1月到去年今天的语句吧?一看就知道是想算同比了。
ADD_MONTHS(sysdate,-12) 去年今天
ADD_MONTHS(trunc(sysdate,'yyyy') ,-12)去年第一天
where DATE>=ADD_MONTHS(trunc(sysdate,'yyyy') ,-12) and date<=ADD_MONTHS(sysdate,-12)
或者 where date between ADD_MONTHS(trunc(sysdate,'yyyy') ,-12) and ADD_MONTHS(sysdate,-12)
参考技术A 像楼上老铁说的,条件里加个时间就行了啊,比如 where date between '20170101' and '20180831'
你要动态的话,就获取系统时间,当前系统时间和当前系统时间减去一年,不就是近一年的咯追问

大佬,是去年1月1日到去年今天,不是去年今天到今天,我的表达有问题,求大佬再想想办法,感谢!

参考技术B 2017-01-01可以定死,然后加个sysdate当天,那样就可以动态的.
where DATE>='2017-01-01' and date<=sysdate
如果你的date有时间,可以用to_days()函数去转换成你的格式追问

两个问题大佬
第一,2017-1-1不能定死,因为会跨年····
第二,是到去年今天,不是今天。
求大佬,再想想有没有招

追答

哦,题目看错不好意思
那也简单首先去年的今天,用函数ADD_MONTHS (sysdate, -12),就能获取,
然后去年第一天first_day(add_months(sysdate,-12)),
trunc(add_months(sysdate,-12),'year')

追问

大佬,报错,First_Day标识符无效,数据库是Oracle,以下是我写的SQL,看看是不是我哪里写错了啊?
SELECT COUNT(*)
FROM SITE_INFO T
WHERE CREATE_TIME >= FIRST_DAY(ADD_MONTHS(SYSDATE,-12))
AND CREATE_TIME <= ADD_MONTHS (SYSDATE, -12)

追答

SELECT COUNT(*)
FROM SITE_INFO T
WHERE CREATE_TIME >= trunc(add_months(sysdate,-12),'year')
AND CREATE_TIME <= ADD_MONTHS (SYSDATE, -12)
用另一个吧

本回答被提问者采纳
参考技术C Between add_months(trunc(sysdate,’Y’),-12) and add_months(trunc(sysdate),-12)

Java8中LocalDate获取时间字符yyyy-MM-dd昨天今天明天上个月下个月去年明年的时间字符

		//昨天
        String yesterdayStr = LocalDate.now().minusDays(1).atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("yesterdayStr = " + yesterdayStr);
        //今天
        String todayStr = LocalDate.now().atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("todayStr = " + todayStr);
        //明天
        String tomorrowStr = LocalDate.now().plusDays(1).atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("tomorrowStr = " + tomorrowStr);
        //上个月
        String lastMonthStr = LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("lastMonthStr = " + lastMonthStr);
        //下个月
        String nextMonthStr = LocalDate.now().plusMonths(1).atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("nextMonthStr = " + nextMonthStr);
        //去年
        String lastYearStr = LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("lastYearStr = " + lastYearStr);
        //明年
        String nextYearStr = LocalDate.now().plusYears(1).atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println("nextYearStr = " + nextYearStr);

运行后效果图片
在这里插入图片描述

以上是关于Oracle查询去年1月1日到去年今天的数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 从数据库中查询去年的今天的数据的sql语句

sql server 中取出今年和去年每个月的数据

Oracle 解决存储过程包中,kill session的权限问题

Toad For Oracle:未声明绑定变量“End_Year”

Java8中LocalDate获取时间字符yyyy-MM-dd昨天今天明天上个月下个月去年明年的时间字符

渥太华2021房价搜索引擎