一、日期、时间、日期时间与时间戳
根据表示的类型、精度的不同,数据库中的日期时间数据类型分为
二、主流数据库系统中日期时间类型的表示方式
在 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
七、取得日期的指定部分