如何编写查询以获取期间范围内的数据?

时间:2012-05-14 05:15:12

标签: sql oracle

我有一个包含

列的员工表
emp_id, firstname, lastname, month  and year.

现在我需要在 2012年1月 2012年3月之间的表格中获得员工
在列中,我们为jan存储“1”,为行军存储“3”,即月份数字和年份列具有年份,如 2012
请帮忙。

4 个答案:

答案 0 :(得分:2)

Januar和2012年3月之间的员工:

select * from employee
where year = 2012 and month between 1 and 3

2012年1月至2013年3月期间的员工:

select * from employee
where (year = 2012 and month between 3 and 12)
or (year = 2013 and month between 1 and 3)

答案 1 :(得分:0)

SELECT * 
FROM  employee
WHERE to_char(year,0000) + to_char(month,00) BETWEEN '201201' AND '201203'

答案 2 :(得分:0)

我认为在进行选择之前,最好将所有内容转换为日期时间。我个人更喜欢单个日期时间列,而不是单独的'月'和'年'列,但如果你不能这样做,这样的事情会起作用:

SELECT * FROM employees 
 WHERE CAST( CAST(year AS VARCHAR(4)) +
            RIGHT('0' + CAST(month AS VARCHAR(2)), 2) +
            '00'
            AS DATETIME)
BETWEEN
    CAST( CAST(start_year AS VARCHAR(4)) +
            RIGHT('0' + CAST(start_month AS VARCHAR(2)), 2) +
            '00'
            AS DATETIME)
AND
    CAST( CAST(end_year AS VARCHAR(4)) +
            RIGHT('0' + CAST(end_month AS VARCHAR(2)), 2) +
            '00'
            AS DATETIME)

不幸的是,这有点难看。也许可以通过将开始和结束日期转换为选择语句之前的日期时间并将它们存储在变量中来清理它?

答案 3 :(得分:-1)

嗨,这可能对你有帮助,

 select * from emp
where to_date(concat('1-',concat(concat(month,'-'), year)),'DD-MM-YY') 
      between to_date('1-&month-&year' ,'DD-MM-YY') 
and   to_date('1-&month-&year' ,'DD-MM-YY') ;

我将每个月份和年份值转换为指定格式的数据并进行比较。