我是新来的,这一切都有点令人困惑,所以如果我在这里做错了什么,我会在一开始就原谅自己。
我通常使用 MySQL,有时使用 Oracle,但现在我必须切换到 Teradata。
我需要转换这个:
SELECT FLOOR(DATEDIFF(NOW(),`startdate`)/365.25) AS `years`,
COUNT(FLOOR(DATEDIFF(NOW(),`startdate`)/365.25)) AS `numberofemployees`
FROM `employees`
WHERE 1
GROUP BY `years`
ORDER BY `years`;
进入 Teradata。
如果有人能帮忙那就太好了:)
Teradata 中的查询等效项为:
SELECT FLOOR((CURRENT_DATE - startdate)/365.2500) AS years,
COUNT(FLOOR((CURRENT_DATE - startdate )/365.2500)) AS numberofemployees
FROM employees
--WHERE 1
GROUP BY years
ORDER BY years;
CURRENT_DATE 相当于 NOW() (如果没有时间部分,DATEDIFF 部分无论如何都会忽略它)。 在 Teradata 中,您只需减去日期即可得到中间的天数。 另外,我在 365.25 末尾添加了两个零,以强制 Teradata 将除法计算为小数点后 4 位,因为 MySQL 似乎就是这样执行的(https://dev.mysql.com/doc/refman/8.0/en /arithmetic-functions.html#:~:text=在%20division%20中用%20/%2C%20执行%20的%20scale%20的%20的%20结果%20当%20使用%20two%20精确值%20操作数%20是%20时%20scale%20of%20the%20first%20operand%20plus%20the%20value%20of%20the%20div_ precision_increment%20system%20variable%20(其中%20默认为%204%20by%20).
但是,我不确定是否彻底理解了您原来的查询: