PostgreSQL 当月最后一天的工作日 , 计算日期是星期几
可以用pg自带函数select extract(dow from current_date),之所以没用主要是展示一下通过数学方法计算日期的原理.
drop function if exists getDateWeek(date);
drop function if exists intervalDay(date);
drop function if exists getMonMaxDay(integer,integer);
drop function if exists getMonMaxDate(integer,integer);
/****************************************************************************************
判断年份是闰年还是平年
drop function if exists isleap(integer);
select isleap(2018);
****************************************************************************************/
create or replace function isleap(integer)
returns boolean
as $$
select (($1 % 4) = 0 and (($1 % 100) <> 0 or ($1 % 400) = 0))
$$ language sql immutable strict;
/****************************************************************************************
根据年度和月份获取本月的最后一天
drop function if exists getDateWeek(integer,integer);
drop function if exists getMonMaxDate(integer,integer);
select getMonMaxDay(2018,8);
select getMonMaxDate(2018,8);
****************************************************************************************/
create or replace function getMonMaxDay(iyear integer,imonth integer)
returns integer
as $$
select
(case when 2=$2 then
(case when isleap($1) then
29
else
28
end)
when 4=$2 or 6=$2 or 9=$2 or 11=$2 then
30
else
31
end)
$$ language sql immutable strict;
create or replace function getMonMaxDate(iyear integer,imonth integer)
returns date
as $$
select make_date( iyear,imonth,
(case when 2=$2 then
(case when isleap($1) then
29
else
28
end)
when 4=$2 or 6=$2 or 9=$2 or 11=$2 then
30
else
31
end));
$$ language sql immutable strict;
/****************************************************************************************
与1970-1-1间隔多少天
drop function if exists intervalDay(date);
select intervalDay(current_date);
****************************************************************************************/
create or replace function intervalDay(date)
returns integer
as $$
select (extract(epoch from $1) / 86400)::integer;
$$ language sql immutable strict;
/****************************************************************************************
获取日期是星期几
1970-1-1是星期4
返回结果中的0表示星期天
drop function if exists getDateWeek(date);
select getMonLastDayWeek('2019-08-1'::date);
****************************************************************************************/
create or replace function getDateWeek(date)
returns integer
as $$
with cte as (
select ( ( 4 + intervalDay($1) ) % 7 ) as val
) select ( case when val < 0 then
7+val
else
val
end)
from cte
$$ language sql immutable strict;
使用方法
--检查函数是否正确
with cte as(
select to_timestamp(val*86400) as dt from generate_series(-100,100) as val
)select getDateWeek(dt::date),dt from cte;
--获取2017年6月的最后一天是星期几
select getDateWeek(getMonMaxDate(2017,6));
---------------------
作者:kmblack1
来源:CSDN
原文:https://blog.csdn.net/kmblack1/article/details/82414602
版权声明:本文为博主原创文章,转载请附上博文链接!
PostgreSQL 当月最后一天的工作日 , 计算日期是星期几的更多相关文章
- JS获取当年当月最后一天日期
<html xmlns="http://www.w3.org/1999/xhtml" > <meta charset="UTF-8"> ...
- 使用SQL语句查询日期(当月天数,当月第一天,当月最后一天,本年最后一天,当月第一个星期) 日期转字符串
取某月天数:,) --当月天数 ,DATEADD(m, DATEDIFF(m,,getdate())+,))) ---当月第一天 ,getdate()) ---当月最后一天 ,dateadd(m,,d ...
- php 日期 - 获取当月最后一天
/** * 日期-获取当月最后一天 * @return int */ public function get_lastday() { if($this->month==2) { $lastday ...
- PHP计算上一个月最后一天、当月最后一天、下一个月最后一天
上个月最后一天: $last_month_last_day = date('Y-m-t',strtotime('-1 month')); 当月最后一天: $first_day=date('Y-m-01 ...
- sqlserver计算日期
在网上找到的一篇文章,相当不错哦O(∩_∩)O~ 这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一 ...
- ThinkPHP 获取指定日期后第N个工作日具体日期
思路: 1.获取到查询年份内所有工作日数据数组2.获取到查询开始日期在工作日的索引3.计算需查询日期索引4.获得查询日期 /*创建日期类型记录表格*/ CREATE TABLE `tb_workday ...
- mysql上月最后一天,当月最后一天
select last_day(DATE_SUB(now(),INTERVAL 1 MONTH)) #上月最后一天日期 %Y-%m-%d select last_day(curdate()) #当月最 ...
- 计算日期时间 自动加1天 PHP计算闰年 java与PHP时间戳对比区别
昨天写一个同步数据库的模块 从一个数据库同步到另外一个数据库,因为数据较多,不可能一次性全部搬迁过去,所以就按照每天搬迁! 写了一个 模块,点击加1,只要点击一次,自动从A数据库取出1天的数据, 并 ...
- MSSQL 获取指定日期所在星期的第一天和最后一天日期 获取指定日期坐在月的第一天和最后一天
ufn_GetWeekFirstAndEndDay 获取指定日期所在星期的第一天和最后一天日期 ALTER FUNCTION [dbo].[ufn_GetWeekFirstAndEndDay]( ...
随机推荐
- 弹性盒模型display:flex
Flex布局意为"弹性布局",用来为盒模型提供更多灵活性.此外,Flex定义的容器可以对块级元素(display: flex;)或行内元素(display: inline-flex ...
- ELECTRON 打包
安装electron-packager cnpm install electron-packager -g 配置package.json "scripts": { "st ...
- JavaScript随机验证码
利用canvas制作一个随机验证码: 1.clearRect:context.clearRect(x,y,width,height);清空给定矩形内的指定像素 2.fillStyle:设置画笔的颜色 ...
- Redis笔记一
REmote DIctionary Server 是一个开源.内存存储的数据结构服务器,可以用作数据库来存储key-value数据,支持字符串,哈希表,列表,集合,位图,地理空间信息等数据类型,同时也 ...
- H5存储方式
数据存储 var arr = [0, 1, 1, 1]; //存储,IE6~7 cookie 其他浏览器HTML5本地存储 if (window.localStorage) { localStorag ...
- SpringMVC的工作原理(转)
SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMa ...
- css 之内容溢出滚动,隐藏滚动条(解决火狐浏览隐藏不了滚动条问题)
解决火狐浏览隐藏不了滚动条问题 1.里层容器的width多17px,外层容器溢出隐藏,能兼容各个浏览器 .outContainer { width:350px; height:300px; overf ...
- Mac上的redis安装与jedis入门
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件 安装与配置 (1) https://redis.io/download下载redis stable ...
- P2402 奶牛隐藏 二分+网络流
floyd搞出两点间最短距离 二分判答案 // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; ty ...
- sessionStorage 与 localStorage 重新认识?
之前写过一次关于 js存储的总结,但是今天在项目中遇到一个bug让我重新在认识 sessionStorage 与 localStorage.以下的介绍都是基于同源下进行的,仔细看下面的案例: a.ht ...