2013-08-21 79 views
1

我被要求提取星期六雇用的员工的信息。我尝试像下面给出的代码。不过,偶虽然有可用的数据的,它让我没有可用的提取日期

select first_name,last_name 
    from employees 
where upper(to_char(hire_date,'day')) like 'SATURDAY' 

数据但是,当我使用下面的代码它就像冠军。这段代码是我老板给我的。

select first_name,last_name 
    from employees 
WHERE TO_CHAR(HIRE_DATE,'fmDay') = 'Saturday' 

我想知道为什么我的代码不起作用。请解释。我是甲骨文的新手,并努力寻找一个功能与另一个功能之间的差异。

+2

这将有助于:http://www.geekinterview.com/talk/16087-difference-between-day-fmday-month-fmmonth.html#post50067 – ajmalmhd04

回答

5

TO_CHAR(hire_date,'day')返回当天名,填补空白,从一周中名字最长的长度的权利。碰巧是Wednesday,那么每个返回的日期名称短于9个字符将填空。

like 'SATURDAY'没有通配符的情况相当于= 'SATURDAY'

所以,to_char(hire_date,'day')返回SATURDAY_(其中_是一个额外的空格字符),它不等于SATURDAY,因此您的查询返回没有行。

使用FM格式模型修饰符(TO_CHAR(HIRE_DATE,'fmDay'))可以去除这些多余的空格。

+0

感谢@尼古拉斯正是我期待的定义..非常感谢 –

+1

一些拼写错误后,“所以返回..平等”SATURDAY'“.. 这对于一个理解问题:http://sqlfiddle.com/#!4/10ce9/2/0 – ajmalmhd04

0

尝试查询使用下面的语句来检查条件第一:

select upper(to_char(hire_date,'day')) from employees 
1
select to_char (date '2011-07-24', 'D') d from dual; 

这个查询将返回映射到一天的工作,所以你可以重写你查询作为

select first_name,last_name 
from employees 
WHERE to_char (Hire_date '2011-07-24', 'D') d = 7 
+0

是粗言我也试过了..我只是想知道为什么我的查询不起作用...... @尼古拉斯已经解释得很好 –

2

差异在星期几和星期六之间,在星期六可以通过放置'fm'前缀来删除嵌入的空格。

尝试使用此方法得到的结果,

select first_name,last_name 
    from employees 
where REPLACE(upper(to_char(hire_date,'day')),' ','') like 'SATURDAY' 
+0

参考, http://www.java2s.com/Code/Oracle/Data-Type/TOCHARDatefmDayMonthfmDDYYYYEmbeddedspacescanberemovedbyplacingthempmpfix.htm – Dba

+2

不会'trim'更简单比'替换'? –

+0

是的亚历克斯,修剪会更好,更简单。谢谢。 – Dba