笔记来自如鹏网杨中科老师所著的 《程序员的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. drf-序列化字段及参数、序列化和反序列化高级用法、ModelSerializer使用

    1.序列化类常用字段和字段参数 1.1 常用字段类 1.BooleanField 2 NullBooleanField 3 CharField CharField(max_length=None, m ...

  2. python基本数据类型与内置方法

    1.数据类型内置方法理论 1.每一种数据类型本身都含有一系列的操作方法,内置方法是其本身自带的功能,是其中最多的. 2.python中数据类型调用的内置方法的统一句式为>>>:句点符 ...

  3. 【一句话】Redis的3中缓存策略

    首先一句话: 旁路缓存模式策略:写->写DB,删缓存,读->读cache,没有则读DB,然后更新到缓存 读写穿透策略:写->写缓存,然后由缓存系统写DB,读->读cache,没 ...

  4. Java编译异常捕捉与上报笔记

    异常处理机制的作用:增强程序的健壮性 处理编译异常方式一: 在方法声明位置上使用throws关键字抛出,谁调用该方法,就交给谁处理 注意:为Exception的是需要处理的,否则编译器会报错,可以一直 ...

  5. maven项目构建报错:Could not find artifact com.xxx.cloud:xxx-cloud:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM

    maven多模块项目打包的时候报错如下: [ERROR] [ERROR] Some problems were encountered while processing the POMs: [FATA ...

  6. echarts的颜色渐变

    官网文档解释 // 线性渐变,前四个参数分别是 x0, y0, x2, y2, //范围从 0 - 1,相当于在图形包围盒中的百分比, //如果 global 为 `true`,则该四个值是绝对的像素 ...

  7. PHY状态机分析

    PHY的12种状态 enum phy_state { PHY_DOWN = 0, //关闭网卡 PHY_STARTING, //PHY设备准备好了,PHY driver尚为准备好 PHY_READY, ...

  8. [BSR文摘] 如何解释CRP正常而多普勒超声显示关节炎活动的RA亚型

    如何解释CRP正常而多普勒超声显示关节炎活动的RA亚型 Braford CM, et al.Rheumatology 2016. Present ID: 72. 背景:临床门诊越来越多地利用肌肉骨骼超 ...

  9. kali日常快捷命令(用到就更新)

    什么BASH命令? 在Linux上采用bash作为标准,基本上它描述了对带有".sh"扩展名的vi编辑器等文本的处理并执行. 与编程一样,它有许多函数,如变量,函数和算术处理,所以 ...

  10. Column count doesn't match value count at row 1存储的数据与数据库表的字段类型定义不相匹配

    一.造成这个原因可能是一个关于创建json数据类型的mysql表格插入的一个报错提示: 26行为错误示范:27是正确书写规范.