转换为TO_CHAR(HIRE_DATE,'MONTH')时无输出

时间:2018-10-14 06:57:17

标签: sql oracle

当我搜索5月或11月雇用的员工时,为什么第一个查询不返回任何行,而第二个查询却返回任何行?我的默认日期格式为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 :(得分:3)

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

答案 1 :(得分:2)

您的查询有几个问题。

当您使用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)以外,您还可以使用 <div class="col-sm-6 col-xs-12"> <div class="toolbar-tools pull-right"> <ul class="nav navbar-right"> @if(Entrust::can('add_post')) <li> @foreach($main_title_options as $option) <a href="{{ url('admin/post/create') }}" @if(isset($_GET['main_title']) && $_GET['main_title'] == $option->value)> <i class="fa fa-plus"></i> {{ trans('labels.create_' . $option->value ) }} @else {{ trans('labels.create_posts') }} @endif @endforeach </a> </li> @endif </ul> </div> </div> 来返回月份作为数字。