学习笔记(主流数据库时间字段处理)

书名:《程序员的SQL 金典》

 

取得当前日期时间

MYSQL

MYSQL中提供了NOW()函数用于取得当前的日期时间,NOW()函数还有SYSDATE()、
CURRENT_TIMESTAMP等别名。如下:
SELECT NOW(),SYSDATE(),CURRENT_TIMESTAMP
执行完毕我们就能在输出结果中看到下面的执行结果:
NOW() SYSDATE() CURRENT_TIMESTAMP
2008-01-12 01:13:19 2008-01-12 01:13:19 2008-01-12 01:13:19
如果想得到不包括时间部分的当前日期,则可以使用CURDATE()函数,CURDATE()
函数还有CURRENT_DATE等别名。如下:
SELECT CURDATE(),CURRENT_DATE
执行完毕我们就能在输出结果中看到下面的执行结果:
CURDATE() CURRENT_DATE
2008-01-12 2008-01-12
如果想得到不包括日期部分的当前时间,则可以使用CURTIME()函数,CURTIME ()
函数还有CURRENT_TIME等别名。如下:
SELECT CURTIME(),CURRENT_TIME
执行完毕我们就能在输出结果中看到下面的执行结果:
CURTIME() CURRENT_TIME
01:17:09 01:17:09

MSQLServer

 

 

MSSQLServer 中用于取得当前日期时间的函数为GETDATE()。如下:
SELECT GETDATE() as 当前日期时间
执行完毕我们就能在输出结果中看到下面的执行结果:
当前日期时间
2008-01-12 01:02:04.78
可以看到GETDATE()返回的信息是包括了日期、时间(精确到秒以后部分)的时间戳
信息。MSSQLServer 没有专门提供取得当前日期、取得当前时间的函数,不过我们可以将
GETDATE()的返回值进行处理,这里需要借助于Convert()函数,这个函数的详细介绍后面
章节介绍,这里只介绍它在日期处理方面的应用。
使用 CONVERT(VARCHAR(50) ,日期时间值, 101)可以得到日期时间值的日期部分,因
此下面的SQL 语句可以得到当前的日期值:
SELECT CONVERT(VARCHAR(50) ,GETDATE( ), 101) as 当前日期
执行完毕我们就能在输出结果中看到下面的执行结果:
当前日期
01/14/2008
使用CONVERT(VARCHAR(50) ,日期时间值, 108)可以得到日期时间值的日期部分,因
此下面的SQL 语句可以得到当前的日期值:
SELECT CONVERT(VARCHAR(50) ,GETDATE(), 108) as 当前时间
执行完毕我们就能在输出结果中看到下面的执行结果:
当前时间
21:37:19

Oracle

 

Oracle 中没有提供取得当前日期时间的函数,不过我们可以到系统表DUAL 中查询
SYSTIMESTAMP的值来得到当前的时间戳。如下:
SELECT SYSTIMESTAMP
FROM DUAL
执行完毕我们就能在输出结果中看到下面的执行结果:
SYSTIMESTAMP
2008-1-14 21.46.42.78000000 8:0
同样,我们可以到系统表DUAL中查询SYSDATE 的值来得到当前日期时间。如下:
SELECT SYSDATE
FROM DUAL
执行完毕我们就能在输出结果中看到下面的执行结果:
SYSDATE
2008-01-14 21:47:16.0
同样,Oracle 中也没有专门提供取得当前日期、取得当前时间的函数,不过我们可以将
SYSDATE 的值进行处理,这里需要借助于TO_CHAR()函数,这个函数的详细介绍后面章节
介绍,这里只介绍它在日期处理方面的应用。
使用 TO_CHAR(时间日期值, 'YYYY-MM-DD') 可以得到日期时间值的日期部分,因此下
面的SQL 语句可以得到当前的日期值:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')
FROM DUAL
执行完毕我们就能在输出结果中看到下面的执行结果:
TO_CHAR(SYSDATE,YYYY-MM-DD)
2008-01-14
使用TO_CHAR(时间日期值, 'HH24:MI:SS') 可以得到日期时间值的时间部分,因此下
面的SQL 语句可以得到当前的日期值:
SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS')
FROM DUAL
执行完毕我们就能在输出结果中看到下面的执行结果:
TO_CHAR(SYSDATE,HH24:MI:SS)
21:56:13

 DB2

 

DB2 中同样没有提供取得当前日期时间的函数,不过我们可以到系统表
SYSIBM.SYSDUMMY1中查询CURRENT TIMESTAMP的值来得到当前时间戳。如下:
SELECT CURRENT TIMESTAMP
FROM SYSIBM.SYSDUMMY1
执行完毕我们就能在输出结果中看到下面的执行结果:
1
2008-01-14-21.58.20.01515000
从系统表SYSIBM.SYSDUMMY1 中查询CURRENT DATE的值来得到当前日期值。如
下:
SELECT CURRENT DATE
FROM SYSIBM.SYSDUMMY1
执行完毕我们就能在输出结果中看到下面的执行结果:
1
2008-01-14
 从系统表SYSIBM.SYSDUMMY1 中查询CURRENT TIME的值来得到当前日期值。如
下:
SELECT CURRENT TIME
FROM SYSIBM.SYSDUMMY1
执行完毕我们就能在输出结果中看到下面的执行结果:
1
22:05:48

 

 

日期增减

MYSQL

MYSQL中提供了DATE_ADD()函数用于进行日期时间的加法运算,这个函数还有一个别名
为ADDDATE(),DATE_ADD()函数的参数格式如下:
DATE_ADD (date,INTERVAL expr type)
其中参数date为待计算的日期;参数expr为待进行加法运算的增量,它可以是数值类型
或者字符串类型,取决于type参数的取值;参数type则为进行加法运算的单位,type参数可
选值以及对应的expr参数的格式如下表:
type参数值 expr参数的格式 说明
MICROSECOND 数值类型 以微秒为计算单位
SECOND 数值类型以秒为计算单位
MINUTE 数值类型以分钟为计算单位
HOUR 数值类型以小时为计算单位
DAY 数值类型以天为计算单位
WEEK 数值类型以周为计算单位
MONTH 数值类型以月为计算单位
QUARTER 数值类型以季度为计算单位
YEAR 数值类型以年为计算单位
SECOND_MICROSECOND
字符串类型,格式为:
'SECONDS.MICROSECON
DS'
以秒、微秒为计算单位,要求expr参
数必须是“秒.微秒”的格式,比如
“30.10”表示增加30秒10微秒。
MINUTE_MICROSECOND
字符串类型,格式为:
'MINUTES.MICROSECON
DS'
以分钟、毫秒为计算单位,要求expr
参数必须是“分钟.微秒”的格式,
比如“30.10”表示增加30分钟10微
秒。
MINUTE_SECOND
字符串类型,格式为:
'MINUTES:SECONDS'
以分钟、秒为计算单位,要求expr参
数必须是“分钟:秒”的格式,比如
“30:10”表示增加30分钟10秒。
HOUR_MICROSECOND
字符串类型,格式为:
'HOURS.MICROSECONDS
'
以小时、微秒为计算单位,要求expr
参数必须是“小时.微秒”的格式,
比如“30.10”表示增加30小时10微
秒。
 HOUR_SECOND
字符串类型,格式为:
'HOURS:MINUTES:SECO
NDS'
以小时、分钟、秒为计算单位,要求
expr参数必须是“小时:分钟:秒”的
格式,比如“1:30:10”表示增加1小
时30分钟10秒。
HOUR_MINUTE
字符串类型,格式为:
'HOURS:MINUTES'
以小时、秒为计算单位,要求expr参
数必须是“小时:秒”的格式,比如
“30:10”表示增加30小时10秒。
DAY_MICROSECOND
字符串类型,格式为:
'DAYS.MICROSECONDS'
以天、微秒为计算单位,要求expr参
数必须是“天.微秒”的格式,比如
“30.10”表示增加30天10微秒。
DAY_SECOND
字符串类型,格式为:
'DAYS
HOURS:MINUTES:SECON
DS'
以天、小时、分钟、秒为计算单位,
要求expr参数必须是“天 小时:分钟:
秒”的格式,比如“1 3:28:36”表示
增加1天3小时28分钟36秒。
DAY_MINUTE
字符串类型,格式为:
'DAYS
HOURS:MINUTES'
以天、小时、分钟为计算单位,要求
expr参数必须是“天 小时:分钟”的
格式,比如“1 3:15”表示增加1天3
小时15分钟。
DAY_HOUR
字符串类型,格式为:
'DAYS HOURS'
以天、小时为计算单位,要求expr参
数必须是“天 小时”的格式,比如
“30 10”表示增加30天10小时。
YEAR_MONTH
字符串类型,格式为:
'YEARS-MONTHS'
以年、月为计算单位,要求expr参数
必须是“年-月”的格式,比如“2-8”
表示增加2年8个月。

 

 

MSSQLServer

MSSQLServer
MSSQLServer中提供了DATEADD()函数用于进行日期时间的加法运算, DATEADD ()函数
的参数格式如下:
DATEADD (datepart , number, date )
其中参数date为待计算的日期;参数date制定了用于与 datepart 相加的值,如果指定
了非整数值,则将舍弃该值的小数部分;参数datepart指定要返回新值的日期的组成部分,
下表列出了 Microso SQL Ser ver 2005 可识别的日期部分及其缩写:
取值 别名 说明
year yy,yyyy 年份
quarter qq,q 季度
month mm,m 月份
dayofyear dy,y 当年度的第几天
day dd,d 日
week wk,ww 当年度的第几周
weekday dw,w 星期几
 hour hh 小时
minute mi,n 分
second ss,s 秒
millisecond ms 毫秒
比 如DATEADD(DAY, 3,date) 为计算日期date 的3 天后的日期, 而
DATEADD(MONTH ,-8,date)为计算日期date的8 个月之前的日期。
下面的SQL语句用于计算每个人出生后3 年、20 个季度、68 个月以及1000 个周前的
日期:
SELECT FBirthDay, DATEADD (YEAR ,3,FBirthDay) as threeyrs,
DATEADD(QUARTER ,20,FBirthDay) as ttqutrs,
DATEADD(MONTH ,68,FBirthDay) as sxtmonths,
DATEADD(WEEK, -1000,FBirthDay) as thweeik
FROM T_Person

 

 

Oracle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值