在日期中提取日期

时间:2013-08-21 09:01:24

标签: sql oracle

我被要求提取星期六雇用的员工的信息。我试着像下面给出的代码。但即便如此,虽然有数据可用,但它显示我没有可用的数据

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'

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

4 个答案:

答案 0 :(得分:5)

TO_CHAR(hire_date,'day')返回日期名称,从右侧填充空白到本周最长名称的长度。恰好是Wednesday,每个返回日的名称短于9个字符将填空。

没有通配符的

like 'SATURDAY'条件等同于= 'SATURDAY'

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

使用FM格式模型修饰符(TO_CHAR(HIRE_DATE,'fmDay'))去掉那些额外的空格。

答案 1 :(得分:2)

day和fmday之间的差异是,在fmday中,可以通过放置'fm'前缀来删除嵌入的空格。

试试这个来获得结果,

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

答案 2 :(得分:1)

  select to_char (date '2011-07-24', 'D') d from dual;

此查询将返回映射到day的数字,以便您可以将查询重写为

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

答案 3 :(得分:0)

尝试使用以下语句查询首先检查条件:

select upper(to_char(hire_date,'day')) from employees