【问题标题】:How to calculate differences of two columns with timestamp format?如何使用时间戳格式计算两列的差异?
【发布时间】:2020-02-06 04:54:34
【问题描述】:

我需要使用时间戳格式创建两列的列差异。

我有col1和col2,需要生成列“diff(hous)”,如图高亮部分。谢谢。

【问题讨论】:

  • 标准 SQL 没有时间函数 - 它们由每个数据库提供者(SQL Server、Oracle、MySql 等)实现。请添加相应的标签以了解您需要哪些功能,

标签: sql timestamp teradata-sql-assistant


【解决方案1】:

Calculate the time difference between two timestamps in mysql

因此,您需要先创建一个空的新列,然后通过执行 TIMESTAMPDIFF 来填充它。 类似的东西:

UPDATE table SET newcolumn = TIMESTAMPDIFF(HOUR,col1,col2);

类似的东西

【讨论】:

  • TIMESTAMPDIFF() 返回整数值。要求是十进制值。
  • 好吧,那您可以使用不同的单位并自己进行计算吗?像 TIMESTAMPDIFF(FRAC_SECOND,col1,col2)/3600000;
  • 得到这个:选择失败。 3706:(-3706)语法错误:数据类型“FRAC_SECOND”与定义的类型名称不匹配。
  • 对不起,我的错,尝试用 MICROSECOND dev.mysql.com/doc/refman/5.5/en/… 替换 FRAC_SECOND 也用 3600000000 替换 360000(微秒是更小的单位)你也可以使用 SECOND 并除以 3600,但你会获得更小的精度
【解决方案2】:

请注意,您的“diff(hours)”值实际上代表天数,而不是小时数。

Teradata 不提供原生时间戳差异函数,但您可以通过提取部分并进行简单数学计算:

select col1, col2,
cast((cast(col1 as date) - cast(col2 as date)) as float)
+cast((extract(hour from col1) - extract(hour from col2)) as float)/24
+cast((extract(minute from col1) - extract(minute from col2)) as float)/24/60
+cast((extract(second from col1) - extract(second from col2)) as float)/24/60/60
as diff_days
from myTable;

如果需要在多个地方使用,可以将计算放入 SQL UDF。

【讨论】:

  • 请注意,数据库本身有一个单独的teradata标签; teradata-sql-assistant 是一个客户端工具。
猜你喜欢
  • 2021-05-04
  • 2020-05-13
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多