PostgreSQL查询近多少年、多少周、根据日期查询这个周的开始时间和结束时间

一、查询连续年的SQL语句

1、查询连接近20年的sql语句
SELECT tab."year" || '年' as text,tab."year" as code FROM (WITH RECURSIVE T ( n ) AS ( 
	SELECT DATE( now( ) - INTERVAL '20 YEAR' ) UNION ALL 
	SELECT n + 1 FROM T  
	WHERE n < DATE ( now( ) ) ) SELECT 
	to_char( n, 'yyyy' ) AS YEAR FROM T GROUP BY YEAR 
ORDER BY YEAR desc) tab
2、查询结果截图

在这里插入图片描述

二、查询某个时间段的周数

1、查询2021-01-01 00:00:00到2021-12-31 23:59:59的周数列表

SELECT tab.times as code,'第'||tab.weeknum||'周' as text FROM (SELECT MIN
		( times ) times,
		CAST ( date_part( 'week', times ) AS VARCHAR ) weeknum 
	FROM
		(
		SELECT A
			times 
		FROM
			generate_series (
				( CAST ( ( '2021' || '-01-01 00:00:00' ) AS TIMESTAMP ) ),
					(SELECT CASE 
				WHEN '2022'=to_char(now(), 'yyyy')	THEN
					CAST ( to_char( CURRENT_DATE, 'yyyy-MM-dd' ) || ' 23:59:59' AS TIMESTAMP ) + '10 day'
				ELSE
					CAST ( '2021' || '-12-31 23:59:59' AS TIMESTAMP ) 
			END as b),
				'1 day' 
			) AS A 
		) AS b 
	GROUP BY
		weeknum 
	ORDER BY
		times ASC ) tab 
2、结果示例

在这里插入图片描述

三、根据传入的一个时间计算本周的开始时间和结束时间

1、查询2020-01-01 00:00:00时间的按周查询开始时间和结束时间
SELECT
	date_trunc( 'week', CAST ( '2020-01-01 00:00:00' AS TIMESTAMP ) ) AS start_time,
	date_trunc( 'week', CAST ( '2020-01-01 00:00:00' AS TIMESTAMP ) ) + INTERVAL '6d' AS end_time
2、结果示例

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值