postgresql 生成时间

 当前系统时间 

         CURRENT_TIMESTAMP 返回当前UTC(GMT+0)时间戳,时间戳单位为毫秒

        now()   同上

SELECT CURRENT_TIMESTAMP
--或
SELECT now()

1.最近七天时间

SELECT DATE( T ) AS DAY
FROM
generate_series ( ( CURRENT_TIMESTAMP - INTERVAL '6 day' ) :: DATE,CURRENT_TIMESTAMP :: DATE, '1 days' ) AS T 

1.1generate_series : PostgreSQL按不同的规则产生一系列的填充数据

        generate_series(条件)

SELECT generate_series(1,7) AS week

1.2 INTERVAL 函数 得到的是一个时间间隔,是一种数据类型,可以直接与日期进行计算

        interval  '间隔时间'  年/月/日/时/分/秒

select
    now() - interval '10' YEAR as "10年前",
    now() - interval '10' MONTH as "10个月前",
    now() - interval '10' day as "10天前",
    now() - interval '10' hour as "10小时前",
    now() - interval '10' minute as "10分钟前",
    now() - interval '10' second as "10秒钟前",
    now() + interval '10' YEAR as "10年后",
    now() + interval '1-3' year to month AS "一年零三个月后"

-- interval '1-3' :1为年间隔,3为月间隔

        注:interval '1-3' :1为年间隔,3为月间隔

 1.3 ' :: '  该符号为:以什么样的形式展示

        :: 展现格式

select CURRENT_TIMESTAMP :: DATE AS "当前日期"

        此处是指定以 DATE 格式展示 

1.4 利用 generate_series 函数,以 ( ( CURRENT_TIMESTAMP - INTERVAL '6 day' ) :: DATE,CURRENT_TIMESTAMP :: DATE, '1 days' ) 为条件,产生填充数据

2.周一、周日、本周

--周一
select to_char(( DATE ( now() ) - ( EXTRACT ( dow FROM DATE ( now() ) ) - 1 || ' day' ) :: INTERVAL ) :: DATE,'YYYY-MM-DD')

--周日
select to_char(( DATE ( now() ) - ( EXTRACT ( dow FROM DATE ( now() ) ) - 1 || ' day' ) :: INTERVAL ) :: DATE + 6,'YYYY-MM-DD')

--本周
SELECT DATE( T ) AS DAY
FROM generate_series (( DATE ( now( ) ) - ( EXTRACT ( dow FROM DATE ( now( ) ) ) - 1 || ' day' ) :: INTERVAL ) :: DATE, ( DATE ( now( ) ) - ( EXTRACT ( dow FROM DATE ( now( ) ) ) - 1 || ' day' ) :: INTERVAL ) :: DATE + 6, '1 days' ) AS T 

注:求本周时间时,周七时,获得的为0,导致周日计算日期为错误日期,待完善。。

另一种方法求出周七为1,如图:

求解决方法

2.1 to_char() : 指的是将数值型或者日期型转化为字符型。

        to_char(时间或时间字段名,’格式‘)

select to_char(now(),'YYYY-MM-dd')

         

         

2.2 EXTRACT() 函数用于提取日期/时间的单独部分,比如年、月、日、小时、分钟等

Select 
	EXTRACT ( YEAR FROM now()) AS "年",
	EXTRACT ( MONTH FROM now()) AS "月",
	EXTRACT ( DAY FROM now()) AS "日",
	EXTRACT ( HOUR FROM now()) AS "时",
	EXTRACT ( MINUTE FROM now()) AS "分",
	EXTRACT ( SECOND FROM now()) AS "秒"

 2.3 DOW 函数,参数是日期型,比如 DOW (DATE())

DOW(<日期型表达式>|<日期时间型表达式>[,<数值表达式>])由日期查星期函数,返回指定日期或日期时间是一周的第几天

select EXTRACT ( dow FROM DATE ( now( ) )) AS "星期"

 

2.4  ' || ' 表示拼接,如’a’||‘b’ 等价于’ab’

Select '当前日期:' || to_char(now(),'YYYY-MM-DD') AS "当前日期"

2.5 解析:

        可以理解为,该sql变为 :

select to_char(( DATE ( now() ) -  INTERVAL '4 day' ) :: DATE,'YYYY-MM-DD')

        周日日期是在此日期加 6 

3.一天前,一天后,一月前等

select 
to_char((CURRENT_TIMESTAMP - INTERVAL '1 day'),'YYYY-MM-DD') AS "一天前",
to_char((CURRENT_TIMESTAMP + INTERVAL '1 day'),'YYYY-MM-DD') AS "一天后"

        具体查看1.2  INTERVAL

本帖为本人学习笔记,不全,有更好的方法,或有错误,欢迎评论区补充与指出

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐