书名:《程序员的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