TeraData SQL 中的 Datediff 函数?

问题描述 投票:0回答:1

我是新来的,这一切都有点令人困惑,所以如果我在这里做错了什么,我会在一开始就原谅自己。

我通常使用 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。

如果有人能帮忙那就太好了:)

sql teradata date-arithmetic
1个回答
0
投票

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).

但是,我不确定是否彻底理解了您原来的查询:

  1. WHERE 1 有什么作用?
  2. 为什么要计算 years 列并将其称为 numberofemployees(为什么不简单地执行 count(*))
© www.soinside.com 2019 - 2024. All rights reserved.