LAST_DAY
LAST_DAY 可以返回指定月份的最后一天例如如果你想知道在ENDDATE 列中的
给出日期中月份的最后一天是几号时你可以输入
输入
SQL>SELECT ENDDATE LAST_DAY ENDDATE FROM PROJECT
结果如下
输出
ENDDATE LAST_DAY(ENDDATE)
01-APR-95 30-APR-95
01-MAY-95 31-MAY-95
30-MAY-95 31-MAY-95
30-JUN-95 30-JUN-95
02-SEP-95 30-SEP-95
17-JAN-96 31-JAN-96
如果是在闰年的最后一天呢
输入/输出
SQL>SELECT LAST_DAY( 1-FEB-95 ) NON_LEAP LAST_DAY( 1-FEB-96 )
LEAP
FROM PROJECT;
NON_LEAP LEAP
28-FEB-95 29-FEB-96
28-FEB-95 29-FEB-96
28-FEB-95 29-FEB-96
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 71
28-FEB-95 29-FEB-96
28-FEB-95 29-FEB-96
28-FEB-95 29-FEB-96
分析
结果当然是正确的可是为什么它输出了这么多行呢这是因为你没有指定任何列或
给出一个条件SQL 引擎对数据库中的每一条记录都应用了这一语句如果你想去掉这些
重复的内容可以这样写
输入
SQL>SELECT DISTINCT LAST_DAY('1-FEB-95') NON_LEAP LAST_DAY('1-FEB-96')
LEAP FROM PROJECT
在这句话中我们使用了关键字DISTINCT 参见第二天的介绍查询— —SELECT 语
句的使用来得到唯一的结果
输出
NON_LEAP LEAP
28-FEB-95 29-FEB-96
虽然在我的电脑上该函数可以正确地识别出闰年来但是如果你要将它应用于金融领
域那么请在你的解释器上试一下看一看它是否支持闰年
MONTHS_BETWEEN
如果你想知道在给定的两个日期中有多少个月可以像这样来使用
MONTHS_BETWEEN
输入
SQL>select task startdate enddate months between(Startdate,enddate) duration from project
输出
TASK STARTDATE ENDDATE DURATION
KICKOFF MTG 01-APR-95 01-APR-95 0
TECH SURVEY 02-APR-95 01-MAY-95 -.9677419
USER MTGS 15-MAY-95 30-MAY-95 -.483871
DESIGN WIDGET 01-JUN-95 30-JUN-95 -.9354839
CODE WIDGET 01-JUL-95 02-SEP-95 -2.032258
TESTING 03-SEP-95 17-JAN-96 -4.451613
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 72
请等一下结果看起来不太对劲再试一下
输入/输出
SQL> SELECT TASK STARTDATE ENDDATE
MONTHS_BETWEEN ENDDATE,STARTDATE DURATION FROM
PROJECT
TASK STARTDATE ENDDATE DURATION
KICKOFF MTG 01-APR-95 01-APR-95 0
TECH SURVEY 02-APR-95 01-MAY-95 .96774194
USER MTGS 15-MAY-95 30-MAY-95 .48387097
DESIGN WIDGET 01-JUN-95 30-JUN-95 .93548387
CODE WIDGET 01-JUL-95 02-SEP-95 2.0322581
TESTING 03-SEP-95 17-JAN-96 4.4516129
分析
如你所见MONTHS_BETWEEN 对于你所给出的月份的次序是敏感的月份值为负
数可能并不是一件坏事例如你可以利用负值来判断某一日期是否在另一个日期之前
下例将会显示所有在1995 年5 月19 日以前开始的比赛
输入
SQL>SELECT * FROM PROJECT
WHERE MONTHS_BETWEEN 19 MAY 95 STARTDATE)
输出
TASK STARTDATE ENDDATE
KICKOFF MTG 01-APR-95 01-APR-95
TECH SURVEY 02-APR-95 01-MAY-95
USER MTGS 15-MAY-95 30-MAY-95
NEW_TIME
如果你想把时间调整到你所在的时区你可以使用NEW_TIME 下边给出了所有的时
区
简写时区简写时区
AST or ADT 大西洋标准时间HST or HDT 阿拉斯加_夏威夷时间
BST or BDT 英国夏令时MST or MDT 美国山区时间
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 73
CST or CDT 美国中央时区NST 新大陆标准时间
EST or EDT 美国东部时区PST or PDT 太平洋标准时间
GMT 格伦威治标准时间YST or YDT Yukon 标准时间
你可以这样来调节时间
输入
SQL>SELECT ENDDATE EDT NEW_TIME ENDDATE EDT PDT FROM
PROJECT
输出
EDT NEW_TIME(ENDDATE EDT PDT
01-APR-95 1200AM 31-MAR-95 0900PM
01-MAY-95 1200AM 30-APR-95 0900PM
30-MAY-95 1200AM 29-MAY-95 0900PM
30-JUN-95 1200AM 29-JUN-95 0900PM
02-SEP-95 1200AM 01-SEP-95 0900PM
17-JAN-96 1200AM 16-JAN-96 0900PM
就像变魔术一样所有的时间和日期都变成以新的时区标准了
NEXT_DAY
NEXT_DAY 将返回与指定日期在同一个星期或之后一个星期内的你所要求的星期天
数的确切日期如果你想知道你所指定的日期的星期五是几号可以这样做
输入
SQL>SELECT STARTDATE NEXT_DAY STARTDATE FRIDAY FROM
PROJECT
返回结果如下
输出
STARTDATE NEXT_DAY(STARTDATE, 'FRIDAY')
01-APR-95 07-APR-95
02-APR-95 07-APR-95
15-MAY-95 19-MAY-95
01-JUN-95 02-JUN-95
01-JUL-95 07-JUL-95
03-SEP-95 08-SEP-95
SQL 21 日自学通(V1.0) 翻译人笨猪
EMAIL wyhsillypig@163.com 74
分析
输出的结果告诉了你距你所指定的日期最近的星期五的日期
SYSDATE
SYSDATE 将返回系统的日期和时间
输入
SQL> SELECT DISTINCT SYSDATE FROM PROJECT
输出
SYSDATE
18-JUN-95 1020PM
如果你想知道在今天你都已经启动了哪些项目的话你可以输入
输入/输出
SQL> SELECT * FROM PROJECT WHERE STARTDATE SYSDATE
TASK STARTDATE ENDDATE
CODE WIDGET 01-JUL-95 02-SEP-95
TESTING 03-SEP-95 17-JAN-96
现在你已经看到了项目在今天所启动的部分