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
本帖为本人学习笔记,不全,有更好的方法,或有错误,欢迎评论区补充与指出