问题是找到 SMITH 和 ALLEN 的经验差异。 所以我写了这个查询。
SELECT DATEDIFF(
SELECT hiredate FROM emp
WHERE ename LIKE 'SMITH',
SELECT hiredate FROM emp
WHERE ename LIKE 'ALLEN'
) FROM emp;
它显示错误.. 这个查询有什么问题。 Plz帮助......
答案 0 :(得分:3)
子查询需要用括号括起来:
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');
此查询的优点是它只读取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'之间?)。
答案 1 :(得分:0)
您可以使用以下查询来获取月份的天数差异:
SELECT ceil(DATEDIFF(
(SELECT hiredate FROM emp WHERE ename LIKE 'SMITH'),(SELECT hiredate FROM emp WHERE ename LIKE 'ALLEN')
)/30.4);