【问题标题】:how can i compare two dates based on month field in sql如何根据sql中的月份字段比较两个日期
【发布时间】:2016-06-17 06:49:57
【问题描述】:

如何根据 sql 中的月份字段比较两个日期?

有人可以举一个例子来显示在经理加入的那几个月里加入的员工姓名吗?

我试过这些:

SELECT e_name
FROM emp5 e,
    department1 d,
    manager m
WHERE e.e_id = d.empno
    AND m.deptno = d.deptno
    AND month(e.hiredate) = month(m.hiredate);

SELECT e_name
FROM emp5 e,
    department1 d,
    manager m
WHERE e.e_id = d.empno
    AND m.dep tno = d.deptno
    AND month(e.hiredate) = month(m.hiredate)

SELECT e_name
FROM emp5 e,
    department1 d,
    manager m
WHERE e.e_id = d.empno
    AND m.deptno = d.deptno
    AND dd - mon - yy(e.hiredate, '%m-%y') = dd - mon - yy(m.hiredate, '%m-%y');



SELECT e_name
FROM emp5 e,
    department1 d,
    manager m
WHERE e.eid = d.empno
    AND m.deptno = d.deptno
    AND extract(month FROM e.hiredate) = extract(month FROM m.hiredate);

这是我的 emp5 表 –

E_ID     E_NAME                   SALARY     HIREDATE 
----- ------------------------- ---------- --------- 
e01   Komal Pandya              13000       02-FEB-15 
e02   Ganesh Patel              20000       01-FEB-15 

【问题讨论】:

  • 您的日期是如何存储的?您尝试过什么,结果是什么?你真正想要什么输出?示例数据和查询将大大有助于您获得有意义的答案。
  • SQL> select e_name from emp5 e,department1 d,manager m where e.e_id=d.empno and m.deptno=d.deptno and month(e.hiredate)=month(m.hiredate ); select e_name from emp5 e,department1 d,manager m where e.e_id=d.empno and m.dep tno=d.deptno and month(e.hiredate)=month(m.hiredate) 2.SQL> select e_name from emp5 e,department1 d,manager m where e.e_id=d.empno and m.deptno=d.deptno and dd-mon-yy(e.hiredate,'%m-%y')=dd-mon-yy(m .hiredate,'%m-%y' );我试过这些......
  • Here 是一些关于如何提出好问题的信息
  • SQL> select e_name from emp5 e,department1 d,manager m where e.eid=d.empno and m .deptno=d.deptno and extract(month from e.hiredate)=extract(month来自 m.hiredat e);我也试过这个。和 E_ID E_NAME SALARY HIREDATE ----- ------------- ---------- --------- e01 Komal Pandya 13000 02-FEB-15 e02 Ganesh Patel 20000 01-FEB-15 这是我的 emp5 表
  • 我不想问这个显而易见的问题,但是您是否设置了适当的数据 - 也就是说,您的两个指定的 emp5 记录有一个部门和经理记录?如果您在月份运行查询时没有匹配 - 您会得到结果吗?

标签: sql oracle


【解决方案1】:

假设您的日期存储为DATE 列,这是从日期中提取月份和年份的两种简单方法:

SQL> select extract(month from sysdate), extract(year from sysdate) from dual;

EXTRACT(MONTHFROMSYSDATE) EXTRACT(YEARFROMSYSDATE)
------------------------- ------------------------
                        3                     2016

SQL> select to_char(sysdate, 'mm/yyyy') from dual;

TO_CHAR
-------
03/2016

【讨论】:

  • 还有MONTH() 函数,他们已经在使用了。
  • 我的无知,没用过;也许它只存在于 12c 上?我刚刚在 11.2.0.2 上试过,但似乎不存在
  • 哦,可能是,我对 oracle 不太熟悉。
  • 您也可以使用 to_char(hiredate,'MONTH') 从日期中提取月份
  • 使用该数据集,似乎不会出现员工和经理具有相同雇用日期的任何情况 - 表明您的查询可能通过不返回匹配项来完美运行
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多