MySQL 中的函数(三:日期时间函数)

一、日期、时间、日期时间与时间戳
根据表示的类型、精度的不同,数据库中的日期时间数据类型分为

  • 日期:日期类型是用来表示 “年-月-日” 信息的数据类型,其精度精确到 “日”,其中包含了年、月、日三个信息,比如 “2008-08-08”。在数据库中,一般用 Date 来表示日期类型。
  • 时间:时间类型是用来表示 “小时:分:秒” 信息的数据类型,其精度精确到 “秒” ,其中包含了小时、分、秒三个信息,比如“19:00:00”。在数据库中,一般用Time来表示时间类型。
  • 日期时间:日期时间类型是用来表示 “年-月-日小时:分:秒” 信息的数据类型,其精度精确到 “秒”,其中包含了年、月、日、小时、分、秒六个信息,比如 “2008-08-08 08:00:00” 。在数据库中,一般用DateTime来表示日期时间类型。
  • 时间戳:数据库中提供了时间戳类型用于表示这些对精度要求更加高的场合,如:想区分表中两条记录插入表中数据插入的先后顺序,由于数据库操作速度非常快,如果用 DateTime 类型记录输入插入时间的话,若两条记录插入的时间间隔非常短的话是无法区分它们的,这时就可以使用时间戳类型。在有的数据库系统中,如果对数据表中的记录进行了更新的话,数据库系统会自动更新其中的时间戳字段的值。数据库中,一般用 TimeStamp 来表示时间戳类型

二、主流数据库系统中日期时间类型的表示方式
在 MYSQL、MSSQLServer 和 DB2 中可以用字符串来表示日期时间类型,数据库系统会自动在内部将它们转换为日期时间类型,
如 “’2008-08-08’”、“2008-08-08 08:00:00”、“08:00:00” 、“2008-08-08 08:00:00.000000” 等。
Oracle 中以字符串表示的数据是不能自动转换为日期时间类型的,必须使用 TO_DATE() 函数来手动将字符串转换为日期时间类型,
如 TO_DATE(‘2008-08-08′,’YYYY-MM-DD HH24:MI:SS’) 、
TO_DATE(‘2008-08-08 08:00:00’, ‘YYYY-MM-DDHH24:MI:SS’)、
TO_DATE(’08:00:00′, ‘YYYY-MM-DD HH24:MI:SS’)等。

三、取得当前日期时间
1、MYSQL
MYSQL 中提供了 NOW() 函数用于取得当前的日期时间,NOW() 函数还有 SYSDATE()、CURRENT_TIMESTAMP 等别名。
如:
SELECT NOW(),SYSDATE(),CURRENT_TIMESTAMP
如果想得到不包括时间部分的当前日期,则可以使用 CURDATE() 函数,CURDATE() 函数还有CURRENT_DATE等别名。
如:
SELECT CURDATE(),CURRENT_DATE
如果想得到不包括日期部分的当前时间,则可以使用 CURTIME()函数,CURTIME () 函数还有CURRENT_TIME等别名。
如:
SELECT CURTIME(),CURRENT_TIME

2、MSQLServer
MSSQLServer 中用于取得当前日期时间的函数为GETDATE()。GETDATE() 返回的信息是包括了日期、时间的时间戳信息
如:
SELECT GETDATE() as 当前日期时间
MSSQLServer 没有专门提供取得当前日期、取得当前时间的函数,但可以将 GETDATE() 的返回值进行处理,这里需要借助于Convert()函数。
使用 CONVERT(VARCHAR(50) ,日期时间值, 101)可以得到日期时间值的日期部分,因此下面的SQL语句可以得到当前的日期值:
SELECT CONVERT(VARCHAR(50) ,GETDATE( ), 101) as 当前日期
使用CONVERT(VARCHAR(50) ,日期时间值, 108)可以得到日期时间值的日期部分,因此下面的SQL语句可以得到当前的日期值:
SELECT CONVERT(VARCHAR(50) ,GETDATE(), 108) as 当前时间

四、日期增减

五、计算日期差额
1、MYSQL
MYSQL 中使用 DATEDIFF() 函数,其参数调用格式如下:
DATEDIFF(date1,date2)
函数将返回 date1 与 date2 之间的天数差额,如果 date2 在 date1 之后返回正值,否则返回负值。
如:计算注册日期和出生日期之间的天数差额:
SELECT FRegDay,FBirthDay, DATEDIFF(FRegDay, FBirthDay) ,
DATEDIFF(FBirthDay ,FRegDay)
FROM T_Person
DATEDIFF() 函数只能计算两个日期之间的天数差额,如果要计算两个日期的周差额等就需要进行换算,
如:计算注册日期和出生日期之间的周数差额:
SELECT FRegDay,FBirthDay, DATEDIFF(FRegDay, FBirthDay)/7
FROM T_Person

2、MSSQLServer
MSSQLServer 中同样提供了 DATEDIFF() 函数用于计算两个日期之间的差额,与 MYSQL 中的 DATEDIFF() 函数不同,它提供了一个额外的参数用于指定计算差额时使用的单位,
其参数调用格式如下:
DATEDIFF ( datepart , startdate , enddate )
其中参数datepart为计算差额时使用的单位;参数startdate为起始日期;参数enddate为结束日期。
如:计算注册日期和出生日期之间的周数差额:
SELECT FRegDay,FBirthDay,DATEDIFF(WEEK, FBirthDay, FRegDay) FROM T_Person

六、计算一个日期是星期几
1、MYSQL
MYSQL 中提供了 DAYNAME() 函数用于计算一个日期是星期几,
如:计算出生日期和注册日期各是星期几:
SELECT FBirthDay,DAYNAME(FBirthDay),
FRegDay,DAYNAME(FRegDay)
FROM T_Person

2、MSQLServer
MSQLServer 中提供了 DATENAME() 函数,这个函数可以返回一个日期的特定部分,并且尽量用名称来表述这个特定部分,
其参数格式如下:
DATENAME(datepart,date)
其中参数 date 为待计算日期,date 参数也可以是日期格式的字符串;参数datepart指定要返回的日期部分的参数。

如果使用 Weekday(或者使用别名dw)做为 datepart参数调用 DATENAME() 函数就可以得到一个日期是星期几,
如:计算出生日期和注册日期各是星期几:
SELECT FBirthDay,DATENAME(Weekday,FBirthDay),
FRegDay,DATENAME(DW, FRegDay)
FROM T_Person

七、取得日期的指定部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值