找出一月份加入的员工人数

时间:2018-07-12 04:53:00

标签: sql oracle to-char

如何从此输出中仅获取1月行?

@RequestMapping(value = "/searchEmployee/{firstname}/{lastname}", method = RequestMethod.GET)
public String getEmployeeByName(@PathVariable("name") String Name, @PathVariable("last") String Last, ModelMap modelMap) {
    List<Student> student = re.findAllByNameAndLast(Name,Last);
    modelMap.addAttribute("message", student);
    return "index";
}

4 个答案:

答案 0 :(得分:1)

尝试一下:

SELECT   to_char(hire_date, 'month') ,
         COUNT(employee_id)
FROM     employees
WHERE   EXTRACT(month FROM hire_date) =1
GROUP BY to_char(hire_date, 'month');

答案 1 :(得分:1)

我认为问题是日期格式掩码不正确。看这个例子:

SQL> select to_char(sysdate, 'month') mon,
  2    length(to_char(sysdate, 'month')) len_mon,
  3    --
  4    to_char(sysdate, 'fmmonth') fmmon,
  5    length(to_char(sysdate, 'fmmonth')) len_fmmon
  6  from dual;

MON          LEN_MON FMMON      LEN_FMMON
--------- ---------- --------- ----------
july               9 july               4

SQL>

看到了吗? 'month'格式掩码会产生'july '(正确填充长度为9个字符),因此您应该TRIM或使用其他格式掩码(例如'fmmonth'),或使用其数字表示形式(1月为“ 1”)。

所以,如果您使用过

where to_char(hire_date,'fmmonth') = 'january'

您可能会得到结果。

答案 2 :(得分:0)

尝试以下操作:

select 
  to_char(hire_date,'month') as hire_month,
  count(employee_id) 
from 
  employees 
where
  hire_month = 'january'
group by 
  to_char(hire_date,'month')

答案 3 :(得分:0)

最好的方法是使用直接日期比较:

select 'January', count(employee_id)
from employees
where hire_date >= date '2018-01-01' and
      hire_date < date '2018-02-01';

这更好,因为它可以利用employees(hire_date)上的索引。

还请注意包含年份。当使用几个月时,我们几乎总是希望同时考虑年份。如果您只想获取任何年份的1月数字,请使用to_char()表达式。