友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第17部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
同样 对字符型列应用该函数时会得到错误信息
输入/输出
SQL》SELECT STDDEV(NAME) FROM TEAMSTATS
ERROR
ORA…01722 invalid number
no rows selected
这些统计函数也可以在一个语句中同时使用
输入/输出
SQL》SELECT COUNT AB AVG(AB) MIN(AB) MAX(AB) STDDEV(AB)
VARIANCE(AB) SUM(AB) FROM TEAMSTATS
COUNT( AVG(A MIN(A MAX( STDDEV( VARIANCE SUM(A
AB) B) B) AB) AB) (AB) B)
6 119。167 1 187 75。589 5712。97 715
当你下次见到比赛结果时 你应该知道了 SQL 正在它的后台工作
日期/ 时间函数
我们的生活是由日期和时间来掌握的 大多数的 SQL 解释器都提供了对它进行支持的
函数 在这一部分我们使用 PROJECT 表来演求日期和时间函数的用法
输入
SQL》 SELECT * FROM PROJECT
输出
TASK STARTDATE ENDDATE
EMAIL wyhsillypig@163。 68
…………………………………………………………Page 69……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
KICKOFFMTG 01…APR…95 01…APR…95
TECHSURVEY 02…APR…95 01…MAY…95
USERMTGS 15…MAY…95 30…MAY…95
DESIGNWIDGET 01…JUN…95 30…JUN…95
CODEWIDGET 01…JUL…95 02…SEP…95
TESTING 03…SEP…95 17…JAN…96
注 这里的数据类型使用日期型 大多数 SQL 解释器都有日期型 但是在语法的细则
上有不同之处
ADD_MONTHS
该函数的功能是将给定的日期增加一个月 举例来说 由于一些特殊的原因 上述的
计划需要推迟两个月 那么可以用下面的方法来重新生成一个日程表
输入
SQL》SELECT TASK STARTDATE ENDDATE
ORIGINAL_END ADD_MONTHS(ENDDATE;2) FROM PROJECT
输出
TASK STARTDATE ORIGINAL ADD_MONTH
KICKOFFMTG 01…APR…95 01…APR…95 01…JUN…95
TECHSURVEY 02…APR…95 01…MAY…95 01…JUL…95
USERMTGS 15…MAY…95 30…MAY…95 30…JUL…95
DESIGNWIDGET 01…JUN…95 30…JUN…95 31…AUG…95
CODEWIDGET 01…JUL…95 02…SEP…95 02…NOV…95
TESTING 03…SEP…95 17…JAN…96 17…MAR…96
尽管这种延误不太可能发生 但是实现日程的变动却是非常容易的 ADD_MONTHS
也可能工作在 SELECT 之外 试着输入
输入
SQL》SELECT TASK TASKS_SHORTER_THAN_ONE_MONTH
FROM PROJECT WHERE ADD_MONTHS(STARTDATE 1) ENDDATE
结果如下所示
输出
TASKS_SHORTER_THAN_ONE_MONTH
EMAIL wyhsillypig@163。 69
…………………………………………………………Page 70……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
KICKOFF MTG
TECH SURVEY
USER MTGS
DESIGN WIDGET
分析
你将会发现这一部分中的几乎所有的函数都可能工作在不只一个地方 但是 如果没
有 TO_CHAR 和 TO_DATE 函数的帮助 ADD_MONTH 就无法在字符或数字类型中工作
这将在今天的晚些时候讨论
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
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
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!