ITPUB论坛-中国专业的IT技术社区

 找回密码
 注册
查看: 3809|回复: 5

[每日一题] PL/SQL Challenge 每日一题:2018-3-31 日期型数据

[复制链接]
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
发表于 2018-4-10 04:52 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。

每两周的优胜者可获得itpub奖励的技术图书一本。

以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808

原始出处:
http://www.plsqlchallenge.com/

作者:Steven Feuerstein

运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY';

哪些选项的代码可用来取代下列代码块中的 ##REPLACE## :

CREATE OR REPLACE FUNCTION qz_is_same_day (date1_in IN DATE, date2_in IN DATE)
   RETURN BOOLEAN
   AUTHID DEFINER
IS
BEGIN
   RETURN ##REPLACE##;
END;
/

使得上述函数编译之后,再执行下面的代码,"Same Day"会被显示两次?

BEGIN
   IF qz_is_same_day (DATE '2018-04-01', DATE '2018-04-01')
   THEN
      DBMS_OUTPUT.put_line ('Same Day');
   END IF;
   
   IF qz_is_same_day (DATE '2018-04-01' + .5, DATE '2018-04-01' + .75)
   THEN
      DBMS_OUTPUT.put_line ('Same Day');
   END IF;
   
   IF qz_is_same_day (DATE '2018-04-01' + .5, DATE '2018-04-02' + .25)
   THEN
      DBMS_OUTPUT.put_line ('Same Day');
   END IF;
END;
/

(A)
date1_in = date2_in

(B)
TRUNC (date1_in) = TRUNC (date2_in)

(C)
TO_CHAR (date1_in) = TO_CHAR (date2_in)

(D)
TO_CHAR (date1_in, 'YYYY-MM-DD') = TO_CHAR (date2_in, 'YYYY-MM-DD')

(E)
TO_CHAR (date1_in, 'J') = TO_CHAR (date2_in, 'J')

(F)
ABS (date1_in - date2_in) < 1
论坛徽章:
142
秀才
日期:2016-01-06 14:01:09秀才
日期:2016-02-18 10:06:46秀才
日期:2016-02-18 10:08:02秀才
日期:2016-02-18 10:08:14秀才
日期:2016-03-01 09:57:08天蝎座
日期:2016-03-18 14:23:56秀才
日期:2016-03-24 09:10:24秀才
日期:2016-03-24 09:20:52秀才
日期:2016-04-21 14:08:53秀才
日期:2016-04-21 14:11:59
发表于 2018-4-10 08:53 | 显示全部楼层
B,C,D,E

使用道具 举报

回复
认证徽章
论坛徽章:
0
发表于 2018-4-10 10:01 | 显示全部楼层
A、B、C 错误,ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY'; 时间已经被格式化,能输出三次"Same Day"
D 正确,第一个和第三个都能输出 "Same Day"
E、F 正确,时间精确到月

使用道具 举报

回复
论坛徽章:
11
懒羊羊
日期:2018-02-27 22:52:20秀才
日期:2018-05-22 15:17:21技术图书徽章
日期:2018-05-22 15:17:21秀才
日期:2018-05-22 15:16:47举人
日期:2018-03-01 10:25:45秀才
日期:2018-03-01 10:21:25秀才
日期:2018-03-01 10:13:04秀才
日期:2018-03-01 10:13:04秀才
日期:2018-03-01 10:13:04秀才
日期:2018-03-01 10:05:18
发表于 2018-4-10 11:41 | 显示全部楼层
B,C,D,E

使用道具 举报

回复
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
 楼主| 发表于 2018-4-11 04:46 | 显示全部楼层
答案BCDE, 由于楼上未对答案进行说明,本期无人得奖。

A: 简单地比较两个日期是不行的。假如两个DATE在同一天的不同时间,这个比较会返回FALSE。"Same Day"只是被显示了一次。
B:(推荐)
通过调用TRUNC, 我去除了时间部分,所以我们只是在比较日期部分(YYYY-MM-DD)。所以假如两个DATE落在同一天就会返回TRUE.
C: (不推荐)
我们假设缺省的日期格式掩码是 "DD-MON-YY"。所以 TO_CHAR 会返回日期部分,而不代时间,于是当两个参数只有时间不同时,表达式会返回TRUE。

这是一种危险的写代码的方法。你应该永远加入明确的格式掩码来避免潜在的bug(会话中的格式掩码可能在你的代码之外被修改!)

D: (推荐)
现在我用了TO_CHAR来转换成日期,但是我明确提供了一个格式掩码并去除了时间部分。所以这个比较逻辑能够正常运作。
E: "J" 格式返回的是儒略历:自从公元前4712年1月1日以来的天数。这是一个整数值,不包含时间部分,所以这个比较是可行的。
F: 这个表达式基本上是在说:如果两个日期相差24小时之内就返回TRUE。

这在某些情况下没有问题并且可能很有用。但是在本例中,它是行不通的,因为两个DATE可能相差在24小时之内但仍不处于同一天。
结果,"Same Day" 被显示了三次。

使用道具 举报

回复
认证徽章
论坛徽章:
198
布鲁克
日期:2016-05-31 16:31:17弗兰奇
日期:2016-05-31 16:31:17妮可·罗宾
日期:2016-07-04 11:53:09托尼托尼·乔巴
日期:2016-05-31 16:31:17山治
日期:2016-05-31 16:31:17乌索普
日期:2016-05-31 16:31:17娜美
日期:2016-05-31 16:31:17罗罗诺亚·索隆
日期:2016-05-31 16:31:17蒙奇·D·路飞
日期:2016-05-31 16:31:17乌索普
日期:2016-08-03 10:26:32
发表于 2018-5-22 15:25 | 显示全部楼层
截止到今日每日一题奖励已发,辛苦newkid大师
本期从3-22到3-31期
每10期题目发一次奖,10期内获奖最多的再奖励一本技术图书~原有的秀才系列徽章继续根据兑换规则兑换礼品~
大家多多努力哦~
本期获奖情况如下(3-22,3-26,3-27,3-30,3-31无人获奖)
superking915
solomon_007
seltion
solomon_007
solomon_007
恭喜solomon_007 同学获得一本技术图书,图书徽章已发,可以到书单换任意一本~
各位其他童鞋继续加油哦~

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表