2

我被要求提取周六被雇用的员工的信息。我尝试了下面给出的代码。但是即使有可用的数据,它也显示我没有可用的数据

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'

我想知道为什么我的代码不起作用。请解释。我是 oracle 的新手,正在努力寻找一个函数和另一个函数之间的区别。

4

4 回答 4

5

TO_CHAR(hire_date,'day')返回日期名称,从右边到最长的星期名称的长度填充空白。碰巧的是Wednesday,每个返回的日期少于 9 个字符的名称将被空白填充。

like 'SATURDAY'不带通配符的条件等价于= 'SATURDAY'.

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

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

于 2013-08-21T09:27:03.850 回答
2

day 和 fmday 之间的区别在于,在 fmday 中,嵌入的空格可以通过放置“fm”前缀来删除。

试试这个得到结果,

select first_name,last_name
  from employees
 where REPLACE(upper(to_char(hire_date,'day')),' ','') like 'SATURDAY'
于 2013-08-21T09:18:17.843 回答
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
于 2013-08-21T09:14:44.687 回答
0

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

select upper(to_char(hire_date,'day')) from employees
于 2013-08-21T09:12:05.850 回答