2013-08-21 2 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

Спасибо @Nicholas точно определение, которого я ожидаю .. Большое спасибо –

+1

некоторые орфографические ошибки после «So return .. equal» 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

Да, Harshit, я тоже это пробовал .. Я просто хочу знать почему мой запрос не работает ... @Nicholas объяснил это хорошо –

2

Difference между днем ​​и fmday, в fmday встроенные пространства можно удалить, поставив префикс «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/TOCHARDatefmDayMonthfmDDYYYYEmbeddedspacescanberemovedbyplacingthefmprefix.htm – Dba

+2

Не будет ли 'trim' проще чем 'replace'? –

+0

Да Алекс, отделка будет лучше и проще. Благодарю. – Dba

Смежные вопросы