周五怎么表示 mysql_完美起航-MySQL找每个月最后一个星期五--函数定义与使用

数据库作业有一道题是这样子的:

有一张名叫emp的表记录员工信息,其中有如下字段 HIREDATE 表示员工被雇用的日期:

10e0ff3482d8fa8d9dc0111b7196b4a0.png

然后问题是这样的:

q7.Show details of employee hiredates and the date of their first payday.

(Paydays occur on the last Friday of each month)

(plus their names)

意思就是每个月的最后一个周五是发工资的日子,要我们输出他们领到第一桶金的日子。(这里其实是计算当月payday,不考虑hiredate超过payday的情况)

那么怎么通过一个日期计算出当月的最后一个周五呢?我们用最暴力的方法,直接迭代计算:

思路:

LAST_DAY 函数找当月最后一天 x

日期 x 逐天减少

直到 x 等于周五,即是最后一个周五

代码:

DELIMITER $$# 结束符由 ; 改为 $$ 。因为函数中间需要用到 ; 号

DROP FUNCTION IF EXISTS last_friday $$# 删除之前定义的函数 last_friday

CREATE FUNCTION last_friday (dt DATE) RETURNS DATE# 定义函数 last_friday 有一个DATE类的形参 dt,返回DATE对象

BEGIN

DECLARE last DATE;# 临时变量 last

SET last=LAST_DAY(dt);# last=dt的最后一天

WHILE DATE_FORMAT(last, "%W")!="Friday" DO# 不断判断是否为周五

SET last=DATE_SUB(last, interval 1 day);# 迭代减少天数

END WHILE;

RETURN last;# 返回结果

END $$

DELIMITER ;# 结束符由 $$ 改为 ; 号

# 不带注释 ↓

DELIMITER $$

DROP FUNCTION IF EXISTS last_friday $$

CREATE FUNCTION last_friday (dt DATE) RETURNS DATE

BEGIN

DECLARE last DATE;

SET last=LAST_DAY(dt);

WHILE DATE_FORMAT(last, "%W")!="Friday" DO

SET last=DATE_SUB(last, interval 1 day);

END WHILE;

RETURN last;

END $$

DELIMITER ;

然后我们就可以通过 last_friday 函数进行查询:

SELECT ENAME, HIREDATE, last_friday(HIREDATE) FROM emp;

结果:

499309c5fb2db077c5a8ffb7df31fe22.png

然后下一题:

q8.Refine your answer to 7 such that it works

even if an employee is hired after the last Friday of the month

(cf Martin)

意思是有一些员工是在payday之后入职的,比如:

2de030e287ba66dbeb3c35621e472c34.png

那么我们应该找下一个payday。思路也很简单,通过 if 语句进行判断即可。

如果当月payday大于入职日期hiredate,返回当月payday

如果当月payday小于入职日期hiredate,返回下个月的payday

我们首先编写一个函数next_friday,计算下个月的payday:

DELIMITER $$

DROP FUNCTION IF EXISTS next_friday $$

CREATE FUNCTION next_friday (dt DATE) RETURNS DATE

BEGIN

DECLARE last DATE;

SET last=LAST_DAY(DATE_ADD(dt, interval 1 month));

WHILE DATE_FORMAT(last, "%W")!="Friday" DO

SET last=DATE_SUB(last, interval 1 day);

END WHILE;

RETURN last;

END $$

DELIMITER ;

这个函数和 last_friday 没啥区别,就是计算下个月而已:

a0fdf96901259bde4d069a51978ba566.png

随后我们修改 last_friday ,最后返回时加一个判断即可:

DELIMITER $$

DROP FUNCTION IF EXISTS last_friday $$

CREATE FUNCTION last_friday (dt DATE) RETURNS DATE

BEGIN

DECLARE last DATE;

SET last=LAST_DAY(dt);

WHILE DATE_FORMAT(last, "%W")!="Friday" DO

SET last=DATE_SUB(last, interval 1 day);

END WHILE;

RETURN IF(last>dt, last, next_friday(dt));

END $$

DELIMITER ;

注意这个 if 表达式即可:

if(expr, case1, case2)

if(条件, 情况1, 情况2)

c50170a4682d9ddbf79c7db216bbedb4.png

随后再次运行查询:

f4d76f0c48bee25daaa6ef821291b80a.png

舒服了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

silverlight学习总结【完】

以下内容是个人理解,不保证正确性。且假设使用C#,并且有一定的相关知识和XML基础。 silverlight是什么,能做什么 silverlight用XAML来做前端界面,用.NET或者JS作为程序脚本支持,在浏览器内外运行的应用。可以认为和FLA…

P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解

目录1、内容概述2、反向链接技术:一种特殊的P2P场景(通信双方中只有一方位于NAT设备之后)3、基于UDP协议的P2P打洞技术详解3.1、原理概述3.2、典型P2P情景1: 两客户端位于同一NAT设备后面(即相同内网中)3.3…

显示照片的RGB直方图

显示照片的RGB直方图 import numpy as np import cv2 as cv from matplotlib import pyplot as plt img cv.imread(E:\Python-workspace\OpenCV\OpenCV/BEYOND.png,1)#第一个参数为选择照片的路径,注意照片路径最后一个为正斜杠其他都为反斜杠;第二个参…

mysql慢查询开启语句分析_mysql慢查询语句分析总结

我们经常会接触到MySQL,也经常会遇到一些MySQL的性能问题。我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题通过SHOW FULL PROCESSLIST查看问题SHOW FULL PROCESSLIST相当于select * from information_schema.processlist可以列出正在运行的连…

P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)

目录1、NAT和NAPT2、NAT带来的问题3、P2P通信穿越NAT的技术、方法4、NAT穿越技术1:应用层网关4.1、原理4.2、限制5、NAT穿越技术2:中间件技术5.1、原理5.2、限制6、NAT穿越技术3:打洞技术(Hole Punching)6.1、原理6.2、方法6.2.1NAT行为类型与…

将两大小完全相同的照片进行加权混合对比

将两张大小完全相同的照片进行加权混合对比 import cv2 img1cv2.imread(E:\Python-workspace\OpenCV\OpenCV/water1.png,1)#第一个参数为选择照片的路径,注意照片路径最后一个为正斜杠其他都为反斜杠;第二个参数,其中1表示所选照片为彩色照片…

P2P技术详解(四):P2P技术之STUN、TURN、ICE详解

目录1、内容概述2、STUN详解2.1 RFC3489/STUN2.1.1 报文结构2.1.2实现原理2.1.3STUN功能举例2.2 RFC5389/STUN2.2.1STUN用途2.2.2报文结构2.3 RFC5389与RFC3489的区别2.4 新特性介绍2.4.1指纹机制2.4.2通过DNS发现服务器机制2.4.3认证和消息完整性机制2.4.4备份服务器机制2.5 R…

比较两张大小相同的照片的差异,返回数值

比较两张大小相同的照片的差异,返回数值 from PIL import Image import math import operator from functools import reducedef image_contrast(img1, img2):image1 Image.open(img1)image2 Image.open(img2)h1 image1.histogram()h2 image2.histogram()resul…

poj2115C Looooops

http://poj.org/problem?id2115 参考人家的 如下 如i65534,当i3时,i1 其实就是 i(655343)%(2^16)1 有了这些思想,设对于某组数据要循环x次结束,那么本题就很容易得到方程: x[(B-A2^k)%2^k] /C 即 Cx(B-A)(mod 2^k) 此…

黑色背景下,计算照片白色的区域面积和周长

黑色背景下,计算照片白色的区域面积和周长 import cv2 img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/beyond.png,1)#第一个参数为选择照片的路径,注意照片路径最后一个为正斜杠其他都为反斜杠;第二个参数,其中1表示所选照…

通俗易懂:快速理解P2P技术中的NAT穿透原理

目录1、基础知识1.1、什么是NAT?1.2、为什么会有NAT?1.3、NAT有什么优缺点?2、NAT的实现方式2.1、静态NAT2.2、NAPT3、NAT的主要类型3.1、完全锥型NAT(Full Cone NAT,后面简称FC)3.2、受限锥型NAT&#xff…

java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...

作用对系统的高可用,网络压力的缓解,处理能力扩容的重要手段之一。服务器负载我们通常所说的负载是指:服务器负载软硬件负载服务器负载又分为:软件负载--硬件负载软件负载:通过在服务器上安装一些具有负载功能或模块的…

b tree和b+tree_B TREE实施

b tree和btreeB TREE及其操作简介 (Introduction to B TREE and its operations) A B tree is designed to store sorted data and allows search, insertion and deletion operation to be performed in logarithmic time. As In multiway search tree, there are so many nod…

黑色背景下,将照片内封闭空心图案的空心区域染成Cyan并保存

在黑色背景下,将照片内封闭空心图案的空心区域染色 import cv2 import numpy as np img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/beyond.png,1)#第一个参数为选择照片的路径,注意照片路径最后一个为正斜杠其他都为反斜杠;第二个参数…

SDP协议基本分析(RTSP、WebRTC使用)

目录一、介绍二、标准 SDP 规范1. SDP 的格式2. SDP 的结构(1)会话描述(2)媒体描述三、WebRTC 中的 SDP一、介绍 SDP(Session Description Protocal)以文本描述各端(PC 端、Mac 端、Android 端…

黑色背景下,描绘照片的轮廓形状并保存

描绘照片的轮廓形状并保存 import cv2 from matplotlib import pyplot as plt # 1.先找到轮廓 img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/beyond.png, 0) _, thresh cv2.threshold(img, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) image, conturs, hierarchy c…

java pdf合并_Java 合并、拆分PDF文档

本文将介绍如何在Java程序中合并及拆分PDF文档,合并文档时,包括合并多个不同PDF文档为一个文档,以及合并PDF文档的不同页面为一页;拆分文档是,包括将PDF文档按每一页拆分,以及按指定页数范围来拆分。下面将…

HDU4405 期望

对于期望,首先,对于这个公式中p表示概率,x表示随机变量 展开则为 ex p1*x1p2*x2p3*x3....... 对于本题 假设 ex[ i ]表示当前 i 走到 n 的期望值。所以若 i 处没有飞机,ex[ i ]sigma(1/6*ex[ik])1 其中(k1...6) (1表示…

很全的SQL注入语句

1、返回的是连接的数据库名and db_name()>02、作用是获取连接用户名and user>03、将数据库备份到Web目录下面;backup database 数据库名 to diskc:\inetpub\wwwroot\1.db;--4、显示SQL系统版本and 1(select VERSION) 或and 1convert(int,version)--5、判断xp_cmdshell扩展…

java异常体系_JAVA异常体系结构详解

一、什么是异常异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象。 ——百度百科二、异常体系Java把异常当作对象来处理&#xf…