首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在BigQuery SQL中从时代时间中提取数据?

如何在BigQuery SQL中从时代时间中提取数据?
EN

Stack Overflow用户
提问于 2015-06-06 16:12:21
回答 3查看 71.8K关注 0票数 33
  1. 我的日期存储在Epoch Time中,我想从中提取Date。我尝试了下面的代码,并将null作为输出。 date_add( (时间戳( Hp.ASSIGN_TIME)),1970-01-01,“第二”)为Extracted_date_Epoch Ex时间格式(1424184621000000)
  2. 还有一个问题。下面的代码给了我正确的天数,但不是工作日,它给出了所有的日子,是否有可能在Epoch时间存储两次营业天数? 整数(Hp.ASSIGN_TIME- Hp.ARRIVAL_TIME) / 1000000) / 86400)为天数
EN

Stack Overflow用户

发布于 2015-06-06 17:12:58

BigQuery提供了两种SQL模式。最初的答案是基于传统模式,但后来我决定通过添加标准模式替代方案来更新答案。

遗留模式

要将timestamp转换为date,可以使用BigQuery日期/时间函数

代码语言:javascript
运行
复制
SELECT TIMESTAMP(1424184621000000)         # 2015-02-17 14:50:21 UTC    
SELECT TIMESTAMP_MICROS(1230219000000000)  # 2008-12-25 15:30:00 UTC
SELECT TIMESTAMP_MILLIS(1230219000000)     # 2008-12-25 15:30:00 UTC
SELECT DATE(TIMESTAMP(1424184621000000))   # 2015-02-17 
SELECT DATE(TIMESTAMP('2015-02-17'))       # 2015-02-17 
SELECT INTEGER(TIMESTAMP('2015-02-17'))    # 1424131200000000

要计算两个日期之间的天数(例如6/1/15至6/20/15之间),您可以这样做:

代码语言:javascript
运行
复制
SELECT (DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)

最后,要计算营业天数,可以使用以下方法:

代码语言:javascript
运行
复制
SELECT
   (DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1)
  -(INTEGER((DATEDIFF(TIMESTAMP('2015-06-20'), TIMESTAMP('2015-06-01')) + 1) / 7) * 2)
  -(CASE WHEN DAYOFWEEK(TIMESTAMP('2015-06-01')) = 1 THEN 1 ELSE 0 END)
  -(CASE WHEN DAYOFWEEK(TIMESTAMP('2015-06-20')) = 7 THEN 1 ELSE 0 END)

这是一个简单的工作日计算,把星期六和太阳当作周末,而不包括任何假期。

标准模式

下面是一些处理TIMESTAMPDATE的示例函数。

代码语言:javascript
运行
复制
SELECT TIMESTAMP_SECONDS(1230219000)       -- 2008-12-25 15:30:00 UTC
SELECT TIMESTAMP_MILLIS(1230219000000)     -- 2008-12-25 15:30:00 UTC
SELECT TIMESTAMP_MICROS(1230219000000000)  -- 2008-12-25 15:30:00 UTC

SELECT DATE(TIMESTAMP_SECONDS(1230219000)) -- 2008-12-25
SELECT CAST('2008-12-25' AS DATE)          -- 2008-12-25
SELECT DATE('2008-12-25', 'UTC')           -- 2008-12-25

用于计算两个日期之间的天数:

代码语言:javascript
运行
复制
SELECT DATE_DIFF(DATE('2015-06-20'), DATE('2015-06-01'), DAY)

最后,像上面这样计算简单的营业天数:

代码语言:javascript
运行
复制
SELECT
  DATE_DIFF(DATE('2015-06-20'), DATE('2015-06-01'), DAY)
  - DIV(DATE_DIFF(DATE('2015-06-20'), DATE('2015-06-01'), DAY),7)*2
  - IF(EXTRACT(DAYOFWEEK FROM DATE('2015-06-01'))=1,1,0)
  - IF(EXTRACT(DAYOFWEEK FROM DATE('2015-06-20'))=7,1,0)
票数 53
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30684920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档