НЕТ ВЫХОДА, КОГДА ПРЕОБРАЗОВАТЬ TO_CHAR (HIRE_DATE, 'MONTH') - PullRequest
0 голосов
/ 14 октября 2018

Почему первый запрос не возвращает строк, когда я ищу сотрудников, нанятых в мае или ноябре, а второй - нет?мой формат даты по умолчанию - rr-mm-dd.Также есть ли способ поиска, если я не знаю формат даты по умолчанию?

SELECT EMPLOYEE_ID,LAST_NAME||', '||FIRST_NAME"Full Name",JOB_ID,HIRE_DATE
 FROM EMPLOYEES WHERE UPPER(TO_CHAR(HIRE_DATE,'MONTH')) IN ('MAY','NOVEMBER');


SELECT EMPLOYEE_ID,LAST_NAME||', '||FIRST_NAME"Full Name",JOB_ID,HIRE_DATE
FROM EMPLOYEES WHERE TO_CHAR(HIRE_DATE,'MM') IN ('11','05');

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

В вашем запросе есть несколько проблем.

Когда вы используете TO_CHAR(HIRE_DATE,'MONTH'), тогда имя месяца дополняется пробелами, попробуйте TO_CHAR(HIRE_DATE,'"MONTH"'), чтобы увидеть эффект.Он должен вернуть "MAY "

Другая проблема - текущий сеанс пользователя NLS_DATE_LANGUAGE, который определяет язык названий месяцев.

Если вы настаиваете на использовании названий месяцев, используйте

WHERE TO_CHAR(HIRE_DATE,'fmMONTH', 'NLS_DATE_LANGUAGE = American') IN ('MAY','NOVEMBER')

или

WHERE TRIM(TO_CHAR(HIRE_DATE,'MONTH', 'NLS_DATE_LANGUAGE = American')) IN ('MAY','NOVEMBER')

Однако лучше всего использовать не имена, а номера месяцев.Вместо TO_CHAR(HIRE_DATE,'MM') вы также можете использовать EXTRACT(MONTH FROM HIRE_DATE), который возвращает месяц в виде числа.

0 голосов
/ 14 октября 2018

Проблема с TO_CHAR заключается в том, что он не будет обрезать конечные пробелы.

Вам следует использовать

SELECT EMPLOYEE_ID,LAST_NAME||', '||FIRST_NAME"Full Name",JOB_ID,HIRE_DATE
 FROM EMPLOYEES WHERE TRIM(TO_CHAR(HIRE_DATE,'MONTH') IN ('MAY','NOVEMBER'); 

Вам также не нужно UPPER, если вы ужеиспользуя капитал MONTH в to_char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...