笔记来自如鹏网杨中科老师所著的 《程序员的SQL金典》

一、日期时间函数:

日期时间类型分为 日期、时间、日期时间、时间戳
     日期:"年-月-日" 没有时间分秒 数据库中用 Date
     时间:"小时:分钟:秒" 数据库中用 Time
     日期时间:"年-月-日 小时:分钟:秒" 数据库中用DateTime
     时间戳 : 详解 http://www.jb51.net/article/51794.htm
   1)、取得当前日期时间:
          A: MySQL:
                Now():当前的日期时间。别名:SysDate()、 Current_TimeStamp()
               CurDate():不包括时间部分的当前日期。 别名:Current_Date()
               CurTime():不包括日期部分的当前时间。别名:Current_Time()
          B: MSSQLServer:
              GetDate() 取得当前时间 返回的包括了:日期、时间(精确到秒以后部分)的时间戳。
              MSSQLServer没有专门的取得当前时间的函数。但是可以通过Convert()函数处理。
              select GETDATE() as 当前日期时间 年-月-日 小时:分钟:秒....
              select CONVERT(VARCHAR(50) ,GETDATE( ), 101) as 当前日期 年-月-日
              select CONVERT(VARCHAR(50) ,GETDATE(), 108) as 当前时间 小时:分钟:秒

二、日期增减

所需表及数据执行脚本:

CREATE TABLE STUDENT
(SNO VARCHAR(3) NOT NULL,
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL,
SBIRTHDAY DATETIME,
CLASS VARCHAR(5))
go
CREATE TABLE COURSE
(CNO VARCHAR(5) NOT NULL,
CNAME VARCHAR(10) NOT NULL,
TNO VARCHAR(10) NOT NULL)
go
CREATE TABLE SCORE
(SNO VARCHAR(3) NOT NULL,
CNO VARCHAR(5) NOT NULL,
DEGREE NUMERIC(10, 1) NOT NULL)
go
CREATE TABLE TEACHER
(TNO VARCHAR(3) NOT NULL,
TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL,
TBIRTHDAY DATETIME NOT NULL, PROF VARCHAR(6),
DEPART VARCHAR(10) NOT NULL)
go
CREATE TABLE [GRADE](
[low] [numeric](3, 0) NULL,
[up] [numeric](3, 0) NULL,
[rank] [char](1) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾华'
,'男' ,1977-09-01,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明'
,'男' ,1975-10-02,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王丽'
,'女' ,1976-01-23,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李军'
,'男' ,1976-02-20,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳'
,'女' ,1975-02-10,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陆君'
,'男' ,1974-06-03,95031);
GO
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机导论',825)
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' ,804);
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'数据电路' ,856);
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' ,100);
GO
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
GO
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (804,'李诚','男','1958-12-02','副教授','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (825,'王萍','女','1972-05-05','助教','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');
GO
INSERT INTO [GRADE]([low],[up],[rank]) VALUES(90,100,'A');
INSERT INTO [GRADE]([low],[up],[rank]) VALUES(80,89,'B');
INSERT INTO [GRADE]([low],[up],[rank]) VALUES(70,79,'C');
INSERT INTO [GRADE]([low],[up],[rank]) VALUES(60,69,'D');
INSERT INTO [GRADE]([low],[up],[rank]) VALUES(0,59,'E');
1)、MySQL中:日期时间的加法运算:
1、查询每个学生的生日增加一周后的所有记录
select *, DATE_ADD(Sbirthday ,INTERVAL 1 week ) as w1 from STUDENT 扩展: SELECT *,
DATE_ADD(Sbirthday,INTERVAL 1 WEEK) as w1, #增加一周
DATE_ADD(Sbirthday,INTERVAL 2 MONTH) as m2, #增加2月
DATE_ADD(Sbirthday,INTERVAL 5 QUARTER) as q5 #增加5个季度
FROM STUDENT

  

2、计算出学生生日期后1年6个月的日期时间
select *,DATE_ADD( DATE_ADD(SBirthday,INTERVAL 1 YEAR) ,INTERVAL 6 MONTH) as NewTime from STUDENT
3、计算每个学生出生一周、两个月以及5个季度前的日期
SELECT *,
DATE_ADD(Sbirthday,INTERVAL -1 WEEK) as w1, #一周前
DATE_ADD(Sbirthday,INTERVAL -2 MONTH) as m2, #两个月前
DATE_ADD(Sbirthday,INTERVAL -5 QUARTER) as q5 #5个季度前
FROM STUDENT

2)、MSSQL Server 中:日期时间的加法运算:

1、查询每个学生的生日增加一周后的所有记录
select *,DATEADD(WEEK,1,SBirthday) as oneweek from student 扩展 :计算每个人出生后 3 年、20 个季度、68 个月以及 1000 个周前的日期

select SBirthday ,DATEADD(YEAR,3,SBirthday) as threeyears ,
DATEADD(QUARTER,20,SBirthday) as ttqutrs,
DATEADD(MONTH ,68,SBirthday) as sxtmonths,
DATEADD(WEEK,-1000,SBirthday) as thweek
from student
2、计算出学生生日期后1年6个月的日期时间
select * ,DATEADD(MONTH,6,DATEADD(YEAR,1,SBirthday)) as oneyear from student

三、计算日期差额:

1)、MySQL中计算日期差额:

1、计算王丽同学的生日距离今天的天数
select *, DATEDIFF(NOW(),SBirthday) as day FROM STUDENT where SName = '王丽'

注意:DATEDIFF(date1,date2)  只能计算两个日期之间的天数差额。如果要计算周差额,需要转换

2、计算王丽同学的生日距离今天的周数差额
select *, DATEDIFF(NOW(),SBirthday)/7 as week FROM STUDENT where SName = '王丽'

2)、MSSQLServer 中计算日期差额:

1、计算王丽同学的生日距离今天的天数
select * ,DATEDIFF(DAY,SBirthday,GETDATE()) from Student where SName= '王丽'
2、计算王丽同学的生日距离今天的周数差额
select * ,DATEDIFF(WEEK,SBirthday,GETDATE()) from Student where SName = '王丽'

四、计算一个日期是星期几

1)、MySQL中计算一个日期是星期几

1、计算学生的生日分别是星期几
select * , DAYNAME(SBirthday) as 星期 from STUDENT

2)、MSSQLServer 中计算日期的特定部分。

1、计算学生的生日分别是星期几
select * ,DATENAME(WEEKDAY,SBirthday) as 星期 from Student

五、取得日期的指定部分

1)、MYSQL 中取得日期的指定部分

1、将学生的生日以 年-月-日的形式转换
select SBirthDay,DATE_FORMAT(SBirthDay,'%Y年%m月%e日') AS rd FROM STUDENT
2、计算每个学生的出生年份、出生时是当年的第几天、出生时是当年的第几周

select
SBirthday,
DATE_FORMAT(SBirthday,'%Y') AS y,
DATE_FORMAT(SBirthday,'%j') AS d,
DATE_FORMAT(SBirthday,'%U') AS u
from STUDENT

2)、MSSQLServer 中取得日期的指定部分

1、计算每个学生的出生年份、出生时是当年的第几天、出生时是当年的第几周
select
SBirthday,
DATENAME(year,SBirthday) AS y,
DATENAME(dayofyear,SBirthday) AS d,
DATENAME(week,SBirthday) AS u
from Student

3、计算学生出生日期是当年第几天
select SBirthday, DATEPART(Dayofyear,SBirthday) from Student

注意:粗看起来,DATEPART()函数和DATENAME()函数完全一样,不过其实它们并不是只是名称不同的别名函数,虽然都是用来提取日期的特定部分的,

不过DATEPART()函数的返回 值是数字而DATENAME()函数则会将尽可能的以名称的方式做为返回值。

SQL时间函数学习的更多相关文章

  1. Sql时间函数

    一.sql server日期时间函数 Sql Server中的日期与时间函数  1.  当前系统日期.时间   select getdate()    2. dateadd  在向指定日期加上一段时间 ...

  2. sql 时间函数大全

    1.        当前系统日期.时间    select getdate() 2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值  例如:向日期加上2天  se ...

  3. SQL 时间函数 Datepart()与DateName()

    1.Datepart() 返回代表指定日期的指定日期部分的整数 语法 Datepart(datepart,date) 返回类型 int datepart: 日期部分 缩写 year yy, yyyy ...

  4. sql server 函数学习

    sql server 创建函数 资料 https://docs.microsoft.com/zh-cn/sql/relational-databases/user-defined-functions/ ...

  5. 几个常用的SQL 时间函数

    --当月第一天declare @startFirstDate datetimeset @startFirstDate=dateadd(dd,datediff(dd,0,getdate()),-day( ...

  6. sql 时间函数用法

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  7. Oracle常用SQL时间函数

    1.查询当前日期和时间 select sysdate from dual; 2.查询本月最后一天 select last_day(sysdate) from dual; 3.查询前后多少月 ) fro ...

  8. python时间函数学习

    格式化当前日期: import time print time.strftime('%Y-%m-%d') 获取一天前的日期: import datetime import time onedayago ...

  9. SQL学习_时间函数

    最近测试报表需要统计不同时间段的列表记录,收集一些时间函数作为参考,原文地址:http://blog.csdn.net/lyzlyfok/article/details/6282509 sql ser ...

  10. SQL SERVER时间函数

    本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的时间函数. 本文只讲SQL SERVER支持的时间函数(其它数据库这里就不罗列了,想看更多的可以关注& ...

随机推荐

  1. 洛谷 P3916 图的遍历

    题目链接 最容易想的思路:对于每一个点都进行dfs/bfs,时间复杂度为O(n*(n+m)),显然超时 可以使用类似记忆化的操作,一个点能到达的最大值是自己所有能达到的边的最大值,则可以递归来做 但有 ...

  2. 黏包现象、struct模块、并行与并发

    1.黏包现象 1.黏包现象产生的背景: 1.1 服务端连续执行三次recv 1.2 客户端连续执行三次send 执行上述操作会发现服务端一次性接收到了客户端三条消息,而后面两次什么都没接收到,该现象称 ...

  3. hashlib加密、subprocess、logging日志模块

    1.hashlib加密模块 1.加密:将明文数据处理成密文数据,让人无法看懂 2.为什么加密:保证数据的安全 3.如何判断数据是否加密:如果是一长串没有规律的字符串(数字.字母.符号)那么数据被加密 ...

  4. idea debug---启动超级慢,提示”Method breakpoints may dramatically slow down debugging“的解决办法

    https://blog.csdn.net/hanqing456/article/details/111878982 1.问题项目正常启动的时候没问题,debug模式就卡住了,很久不动.我推测是哪个断 ...

  5. WAVE音频文件格式及其64位扩展格式的简要介绍

    正文 关于 WAVE 文件格式,网上有不少介绍,但关于WAVE 64位扩展格式的介绍却是几乎没有. 所以本文的目的是简要介绍标准的 WAVE 格式,以及两种主要的扩展格式. 文中所有代码都用C语言来描 ...

  6. C++ 练习11 string的使用

    1 #include <iostream> 2 #include<string>//调用string函数库 3 using namespace std; 4 int main( ...

  7. 【TS】class类和接口

    class可以用来做数据的存储与回显,能将页面的数据分离出来并提取到class内,函数也可以抽离到class,实例化class进行调用.ts中的class类与js的class类基本相同,不同点在于ts ...

  8. flutter系列之:在flutter中使用导航Navigator

    目录 简介 flutter中的Navigator Navigator的使用 总结 简介 一个APP如果没有页面跳转那么是没有灵魂的,页面跳转的一个常用说法就是Navigator,flutter作为一个 ...

  9. 数字列表number,目标值target,找到number中两个不同数字之和等于target的数字,输出下标并顺序排列 ----笔试题记录扩展

    一.思路: 输入:数字列表number,目标值target 判断条件:数字列表中两个不同数字相加等于target 输出:符合条件的两个数字的下标,下标顺序排列 方法1: def list(number ...

  10. 【Vue】Vue开源样式库 Vuex的使用 vuex的执行流程 Vue-router的使用 路由跳转 路由守卫

    目录 昨日回顾 纯净的Vue项目 今日内容 0 开源样式库 1 Vuex 的使用 1.1 vuex的执行流程图 Vuex的使用 购物车案例 2 Vue-router的使用 2.1 基本使用 2.2 路 ...