sql 语句 怎么获取指定月的第一天和最后一天?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 语句 怎么获取指定月的第一天和最后一天?相关的知识,希望对你有一定的参考价值。

在条件查询中这么写对吗?
where
b.fid = a.FParentID
and b.FBizDate >=to_date(to_char('@startdate','YYYY-MM')||'-1','YYYY-MM-DD')
执行总是提示错误
请赐教

first_day()得到一个月中的第一天:如first_day(to_date('2008-5-22','yyyy-mm-dd')) 结果:2008-5-1
last_day()得到一个月最后的一天:如:last_day(to_date('2008-5-22','yyyy-mm-dd')) 结果:2008-5-31 ;追问

不对呀,first_day,提示没这个函数

追答

呵呵,确实没有,

where
b.fid = a.FParentID
and b.FBizDate >=to_date(to_char(@startdate,'YYYY-MM')||'-01','YYYY-MM-DD')

追问

最后一天怎么弄呀

追答

最后一天有last_day的函数啊

参考技术A ORACLE
本月第一天 :select trunc(sysdate,'mm') from dual
本月最后一天:select to_char(last_day(sysdate), 'yyyy-mm-dd') from dual追问

orcal数据库,没这函数

参考技术B select Dateadd(mm,datediff(mm,0,getdate()),0) --月初
select Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) --月末追问

不行,提示-ora-00932

参考技术C 楼上正解, 没看出你写的又错, 不过不知道@startdate 是什么格式 , 检查一下

如何在n个月内使用sql(无程序)获取每个月的第一天和最后一天

【中文标题】如何在n个月内使用sql(无程序)获取每个月的第一天和最后一天【英文标题】:How to get the first and last day of every month using sql(without procedures) for n months 【发布时间】:2021-08-25 11:09:16 【问题描述】:

需要获取n个月过去几个月的日期 n=月数(5)

如果在 6 月 6 日运行,预计 o/p:

01-01-2021 31-01-2021
01-02-2021 28-02-2021
01-03-2021 31-03-2021
01-04-2021 30-04-2021
01-05-2021 31-05-2021

我不想使用任何来自 python 的包,因为它们没有安装在我的服务器中并且无法导入

【问题讨论】:

如果有任何答案帮助您解决了问题,请花点时间接受/投票以关闭已解决的线程! 【参考方案1】:

尝试将 concat 函数与 transform 高阶函数一起使用。

Example:

n=6

spark.sql(f"select explode(transform(sequence(1,n), n -> (to_date(concat_ws('-','2018',n,'01')) as d2,last_day(to_date(concat_ws('-','2018',n,'01')))as d3)))").\
select("col.*").\
show(10,False)
#+----------+----------+
#|d2        |d3        |
#+----------+----------+
#|2018-01-01|2018-01-31|
#|2018-02-01|2018-02-28|
#|2018-03-01|2018-03-31|
#|2018-04-01|2018-04-30|
#|2018-05-01|2018-05-31|
#+----------+----------+

【讨论】:

【参考方案2】:

试试这个 spark-sql

spark.sql("""
with t1( select sequence(1, 5, 1) seq, date'2021-06-06' dt  ),
     t2( select explode(seq) a, dt from t1 ),
     t3( select add_months(dt,-a) d1 ,day(dt) dy from t2 )
     select date_format(d1,'yyyy-MM-01') d2, last_day(date_format(d1,'yyyy-MM-01')) d3 from t3 order by d2
""").show(false)

另一种解决方案:

您可以使用 spark 内置的 range(n) 表。

spark.sql("""
with t1( select id+1 id, date'2021-06-06' dt from range(5) ),
     t2( select add_months(dt,-id) d1 , day(dt) dy from t1 )
     select date_format(d1,'yyyy-MM-01') d2, last_day(date_format(d1,'yyyy-MM-01')) d3 from t2 order by d2
""").show(false)

+----------+----------+
|d2        |d3        |
+----------+----------+
|2021-01-01|2021-01-31|
|2021-02-01|2021-02-28|
|2021-03-01|2021-03-31|
|2021-04-01|2021-04-30|
|2021-05-01|2021-05-31|
+----------+----------+

【讨论】:

以上是关于sql 语句 怎么获取指定月的第一天和最后一天?的主要内容,如果未能解决你的问题,请参考以下文章

如何在n个月内使用sql(无程序)获取每个月的第一天和最后一天

如何用sql获取上个月的第一天和上个月的最后一天

如何使用js获取某月的第一天和最后一天

java-通过年月,获取到月的第一天和最后一天

js 获取当前月和当前周的第一天和最后一天

java 怎样获取每个月的第一天和最后一天