首页 > 数据库 >postgresql获取基于当前时间计算的当月第一天,最后一天,下个月的第n天等功能

postgresql获取基于当前时间计算的当月第一天,最后一天,下个月的第n天等功能

时间:2023-06-22 21:26:16浏览次数:64  
标签:char postgresql 下个月 interval month 天等 获取 date select

问题现象:

​ 今天在项目开发中遇到了一个需求,在编写某个功能时,需要使用到基于某个时间(如当前时间),去获取本月第一天或下个月的第一天的数据.


问题分析:

通过查询资料可以得知,要实现这个需求并不容易,在sql语句中就能很好的获取到,这里我使用的是postgresql数据库,其他数据库应该也是使用了差不多的逻辑.

1.首先是获取当前时间:

select now(); //返回值:当前年月日、时分秒,且秒保留6位小数。

select current_date; //返回值:当前年月日、时分秒,且秒保留6位小数。(同now()

select current_timestamp; //返回值:时分秒,秒最高精确到6位

select current_time; //返回值:年月日

2.获取当月的第一天:

select date_trunc('month',current_date); //date_trunc()函数用于设置时间基点,功能类似于java中的Calender工具类

3.获取上个月的最后一天:

select date_trunc('month',current_date) - interval'1 day' //基于当月第一天,倒退1天

4.获取本月最后一天:

select date_trunc('month',current_date) + interval'1 month - 1 day' //基于当月第一天,前进一个月,再倒退1天

(如当月第一天为 2020-08-01; +1 month 前进一个月为 2020-09-01; 再 - 1 day 倒退1天为 2020-08-31)

这里需要注意的是:

1.系统会自动根据运算结果的年份对应的月份,来计算天数的运算,也就是说不用关注2月份是28天还是29天,也不用关注有些月份是31天,有些月份是30天,系统就自动进行推演运算.

2.这里用到了date_trunc()函数,是用于建立时间基点:

如:date_trunc('month',current_date) 就是将当前时间对应的月份作为基点'month',这里自动默认选取月份的第一天作为基点.

3.interval'' 表达式,用于推演并计算日期时间,就是在原有基础上添加这个表达式中的内容,:

如:+ interval'1 month - 1 day' 就是在基点上添加内容为 ' 1个月 , -1天 ' ;这里面的 1 month没有带+符号为正数, 表示 前进一个月, -1 day 带-符号为负数, 则表示 倒退一天 ,因此在当月第一天的基础上前进一个月再倒退一天,从逻辑上推演就可以得知,结果为当月的最后一天.

4.根据以上的date_trunc()函数和interval'' 表达式,就可以获取到:

基于基点时间计算得到的任何一天的日期时间.

  • 获取当前时间

SELECT now() as timestamp

img

  • 获取本周时间

获取本周周一日期

SELECT to_char(CURRENT_DATE +cast(-1*(TO_NUMBER(to_char(CURRENT_DATE,'D'),'99')-2) ||' days' as interval),'yyyy-mm-dd');

img
获取本周周日日期

SELECT to_char(CURRENT_DATE +cast(-1*(TO_NUMBER(to_char(CURRENT_DATE,'D'),'99')-2)+6 ||' days' as interval),'yyyy-mm-dd')

img

  • 获取本月

select to_char((SELECT now() as timestamp),'mm')

img

  • 获取上月

select to_char((select now() - interval '1 month'),'mm')

img

  • 获取今年

select to_char((SELECT now() as timestamp),'yyyy')

img

  • 获取去年

select to_char((select now() - interval '1 years'),'yyyy')

img

文章知识点与官方知识档案匹配,可进一步学习相关知识

标签:char,postgresql,下个月,interval,month,天等,获取,date,select
From: https://www.cnblogs.com/javaxubo/p/17498345.html

相关文章

  • postgresql数组数据
    一个包含数组的数据表插入数组有两种方法1:'{张三,李四,王五}'2:  array['张三','李四','王五']用单引号,不用双引号insertintopublic.hi6values('2023-9-22',array['张三','李四'],'{王五,孙六,黄七}','test4'); 查询嘉宾......
  • PostgreSQL 时间函数 extract函数和epoch 新纪元时间的使用
    Extract属于SQL的DML(即数据库管理语言)函数,同样,InterBase也支持Extract,它主要用于从一个日期或时间型的字段内抽取年、月、日、时、分、秒数据,因此,它支持其关健字YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、WEEKDAY、YEARDAY。计算时间差天数selectextract(dayFROM(age(......
  • PostgreSQL合并多行数据为一行,string_agg函数
    通过id列来聚合belong_user_saved列,应用string_agg函数,只要id一样则把第二列通过逗号连接起来聚合前:聚合后:SELECT C.ID, string_agg(u.name::varchar,',')belong_user_savedFROM customerC leftjoincustomer_territoryctonct.customer=c.id leftjoinuser_......
  • PostgreSql的聚合函数--string_agg
    聚合函数顾名思义,聚合函数就是类似于min(),max(),sum()等函数,当然这些都是SQL标准的函数,应该都是比较熟悉,也比较常见。这边不对这些常见的函数进行介绍,主要涉及的是PostgreSql自带的一些特色聚合函数进行介绍,自己学习,也与大家共享。主要介绍的聚合函数:String_agg,xmlagg,array_ag......
  • pgsql获取日期段_PostgreSQL时间段查询
    1.今日select*from"表名"whereto_date("时间字段"::text,'yyyy-mm-dd')=current_date2.昨日select*from"表名"whereto_date("时间字段"::text,'yyyy-mm-dd')=current_date-13.最近半个月select*from"表名"......
  • postgreSQL数据库 id自增
    感谢!!!原文:https://blog.csdn.net/weixin_43453621/article/details/1258907742.链接上postgreSQL数据库3.新建表4.增加序列6.添加ID自增长nextval('swp_id'::regclass)或者nextval('swp_id')前者是完整语句后者是简写系统会自动添::regclass,都一样的7.保存最后......
  • postgresql 导入数据库表并重设自增属性的操作
    postgresql使用navicat软件导出数据库表,在导入会数据库的操作。postgresql的自增字段是通过序列sequence来实现的。1、先删除导出的数据库表中的自增属性2、导入数据库表之后,需要创建序列。注:一般序列名称由数据表名+主键字段+seq组成(通常情况下主键字段即为自增字段),如下......
  • PostgreSQL中表名、字段名大小写问题
    感谢原文章博主:https://blog.csdn.net/zengchaoyue/article/details/8279744学习hibernate的时候,数据库用了PostgreSQL,第一节课就抛错,User实体映射没有死活不能导出表。总是提示这一句:​*ERROR:syntaxerroratornear"User"。*​后来发现,如果把表名设成t_user这......
  • PostgreSQL日期相减
    在PostgreSQL中可以直接对时间进行加减运算:、SELECTnow()::timestamp+'1year';--当前时间加1年SELECTnow()::timestamp+'1month';--当前时间加一个月SELECTnow()::timestamp+'1day';--当前时间加一天SELECTnow()::timestamp+'1hour';--当前时间加一个小时......
  • postgresql日期相关函数
    感谢原博文:https://blog.csdn.net/lixinkuan328/article/details/107969398一、Postgresql中string转换成timestamp类型Mybatis+PostgresqlTO_DATE(#{startTime},'YYYY-MM-DD')ANDop_date<![CDATA[>=]]>TO_TIMESTAMP(#{beginTime},'YYYY-MM-DDH......