我有一个员工表,其中包含如下列
emp_id, firstname, lastname, month and year.
现在我需要在 2012 年 1月和2012年 3 月之间从表中获取员工。
在月份和年份列中,我们为 jan 存储“1”,为 March 存储“3”,即月份编号,并且 year 列具有类似2012的年份。
请帮忙。
2012 年 1 月至 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)
SELECT *
FROM employee
WHERE to_char(year,0000) + to_char(month,00) BETWEEN '201201' AND '201203'
我认为您最好在进行选择之前将所有内容都转换为日期时间。我个人更喜欢单个日期时间列而不是单独的“月”和“年”列,但如果你不能那样做,这样的事情会起作用:
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)
不幸的是,这有点丑陋。也许可以通过在选择语句之前将开始日期和结束日期转换为日期时间并将它们存储在变量中来清理它?
嗨,这可能对你有帮助,
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') ;
我将每个月和年的值转换为指定格式的数据并进行比较。