我被要求提取星期六雇用的员工的信息。我试着像下面给出的代码。但即便如此,虽然有数据可用,但它显示我没有可用的数据
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'
我想知道为什么我的代码不起作用。请解释。我是甲骨文的新手,努力寻找一个功能与另一个功能之间的区别。
答案 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