SQL 21日自学通(V3.0)(PDF格式)-第19部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
输入/输出
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
EMAIL wyhsillypig@163。 70
…………………………………………………………Page 71……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
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
EMAIL wyhsillypig@163。 71
…………………………………………………………Page 72……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
请等一下 结果看起来不太对劲 再试一下
输入/输出
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 美国山区时间
EMAIL wyhsillypig@163。 72
…………………………………………………………Page 73……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
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
EMAIL wyhsillypig@163。 73
…………………………………………………………Page 74……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
分析
输出的结果告诉了你距你所指定的日期最近的星期五的日期
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
现在 你已经看到了项目在今天所启动的部分
数学函数
大多数情况下你所检索到的数据在使用时需要用到数学函数 大多数 SQL 的解释器都
提供了与这里相类似的一些数学函数 这里的例子使用的表名字叫 NUMBERS 内容如下
输入
SQL》SELECT * FROM NUMBERS
输出
A B A B
3。1415 4 …57。667 42
…45 。707 15 55
5 9 …7。2 5。3
EMAIL wyhsillypig@163。 74
…………………………………………………………Page 75……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
ABS
ABS 函数返回给定数字的绝对值 例如
输入
SQL》SELECT ABS A ABSOLUTE_VALUE FROM NUMBERS
输出
ABSOLUTE_VALUE ABSOLUTE_VALUE
3。1415 57。667
45 15
5 7。2
CEIL 和 FLOOR
CEIL 返回与给定参数相等或比给定参数在的最小整数 FLOOR 则正好相反 它返回
与给定参数相等或比给定参数小的最大整数 例如
输入
SQL》SELECT B CEIL B CEILING FROM NUMBERS
输出
B CEILING B CEILING
4 4 42 42
。707 1 55 55
9 9 5。3 6
输入/输出
SQL》SELECT A FLOOR A FLOOR FROM NUMBERS
A FLOOR A FLOOR
3。1415 3 …57。667 …58
…45 …45 15 15
5 5 …7。2 …8
COS COSH SIN SINH TAN TANH
COS SIN TAN 函数可以返回给定参数的三角函数值 默认的参数认定为弧度制
如果你没有认识到这一点那你会觉得下例所返回的值是错误
EMAIL wyhsillypig@163。 75
…………………………………………………………Page 76……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输入
SQL》SELECT A COS A FROM NUMBERS
输出
A COS(A) A COS(A)
3。1415 …1 …57。667 。437183
…45 。52532199 15 …。7596879
5 。28366219 …7。2 。60835131
分析
你可能认为 COS 45 的返回值应该为 0。707 左右 而不应该是 0。525 如果你想让它
按照弧度制来计算 那么你需要将弧度制转换成角度制 由于 360 角度为 2 个弧度 所以
我们可以写成
输入/输出
SQL》SELECT A COS A*0。01745329251994 FROM NUMBERS
A COS(A*0。01745329251994)
3。1415 。99849724
…45 。70710678
5 。9961947
…57。667 。5348391
15 。96592583
…7。2 。9921147
分析
这里的将角度转换成弧度后的数值 三角函数也可以像下面所写的那样工作
输入/输出
SQL》SELECT A COS A*0。017453 COSH A*0。017453 FROM NUMBERS
A COS(A*0。017453) COSH(A*0。017453)
3。1415 。99849729 1。0015035
…45 。70711609