linux里面substr函数_decode函数和substr函数习题

此题也是itpub上出的题,总结一下。

第三题

-----------------------------------------------------------------------

Create table Employee

(

empID number,

empName varchar2(20),

SB varchar2(10),

XB varchar2(10),

eDate date

);

insert into Employee values(1,'大傻', '迟到','早退',date'2005-10-17');

insert into Employee values(2,'二傻','按时','早退',Date'2005-10-17');

insert into Employee values(4,'大傻','按时','早退',Date'2005-10-16');

insert into Employee values(5,'二傻','按时','按时',Date'2005-10-17');

查询后的结果:

用户名  月份  上班迟到次数  下班早退次数

大傻     10     1            2

二傻     10     0            1

解题思路方法:

1、首先还是想到利用decode函数来将“迟到”和“早退”累加起来。

2、然后就是日期的截取了,我当时是想了好久,想到利用substr函数来截取日期中的月份,但是自己想的方法有点笨,我用了to_date函数还转换一下,这是麻烦的,也是错误的。

3、其实直接用月份的字段,还有利用substr函数截取就可以了。

4、这时我查到的时候是倒序的,我想将“大傻”放在上面,这时group by函数后不仅加empname,还要将substr(edate,4,2)这个字段加进去,这时就按照时间也分组了。

错误解法:SQL> select substr(to_date('2005-10-17','yyyy-mm-dd'),4,2) as date2,empname,sum(

decode(sb,'迟到',1,0)) as 上班迟到次数,sum(decode(xb,'早退',1,0)) as 下班早退次

数 from employee group by empname;

DA EMPNAME              上班迟到次数 下班早退次数

-- -------------------- ------------ ------------

10 二傻                            0            1

10 大傻                            1            2

SQL> alter session set nls_date_format='yyyy-mm-dd';

会话已更改。

上面的会话将时间的格式变成了17-10月-05,所以利用alter session更改其格式。下面的是正确的写法。我写的那个是将时间固定了,如果有不同的时间就麻烦了。嘻嘻……

正确解法:SQL> Select empName 用户名,substr(edate,4,2) 月份,

2  sum(decode(sb,'迟到',1,0)) as 上班迟到次数,

3  sum(decode(xb,'早退',1,0)) as 下班早退次数

4  from employee

5  group by empname,substr(edate,4,2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值