我有一个包含
列的员工表emp_id, firstname, lastname, month and year.
现在我需要在 2012年1月和 2012年3月之间的表格中获得员工。
在列月和年中,我们为jan存储“1”,为行军存储“3”,即月份数字和年份列具有年份,如 2012 。
请帮忙。
答案 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') ;
我将每个月份和年份值转换为指定格式的数据并进行比较。