问题是找到经验差异SMITH和ALLEN。 所以我写了这个查询。在MySQL中查找员工的经验差异
SELECT DATEDIFF(
SELECT hiredate FROM emp
WHERE ename LIKE 'SMITH',
SELECT hiredate FROM emp
WHERE ename LIKE 'ALLEN'
) FROM emp;
它显示错误.. 这个查询有什么问题。 plz帮助....
问题是找到经验差异SMITH和ALLEN。 所以我写了这个查询。在MySQL中查找员工的经验差异
SELECT DATEDIFF(
SELECT hiredate FROM emp
WHERE ename LIKE 'SMITH',
SELECT hiredate FROM emp
WHERE ename LIKE 'ALLEN'
) FROM emp;
它显示错误.. 这个查询有什么问题。 plz帮助....
子查询必须用括号包围:
SELECT DATEDIFF(
(SELECT hiredate FROM emp
WHERE ename LIKE 'SMITH'),
(SELECT hiredate FROM emp
WHERE ename LIKE 'ALLEN')
) FROM emp;
你实际上并不需要最后from emp
,除非你想很多行:
SELECT DATEDIFF(
(SELECT hiredate FROM emp
WHERE ename LIKE 'SMITH'),
(SELECT hiredate FROM emp
WHERE ename LIKE 'ALLEN')
);
另一种方法来写这个查询:
select datediff(max(case when ename like 'SMITH' then hiredate end),
max(case when ename like 'ALLEN' then hiredate end)
)
from emp
where ename in ('SMITH', 'ALLEN');
advanta这个查询的ge是它只读取一次emp
表。
编辑:(约个月)
MySQL不具有一个内置的计算值之间的几个月能力。近似值为days/30.4
。您可以使用period_diff()
。但是,如果这很重要,那么再问一个问题,并举几个例子来说明你在几个月内的差异('2014-01-31'和'2014-02-01'之间的区别是什么?'2014-01-12之间'和'2014-02-11'?'2014-01-01'和'2014-01-31'之间?)。
谢谢......我真的很喜欢上次查询。这非常有帮助:) –
最后一个应该有一个''',它曾经有'--'。 –
如果我想在**个月**而不是几天内取得差异? –
您可以使用下面的查询来获得在几个月的天差:
SELECT ceil(DATEDIFF(
(SELECT hiredate FROM emp WHERE ename LIKE 'SMITH'),(SELECT hiredate FROM emp WHERE ename LIKE 'ALLEN')
)/30.4);
我想个月,而天差异......我该怎么办? –