我想从时间戳列(YYYYMMDD HHMMSS)中提取月份和年份,如果月份是 1,它应该创建一个名为“January”的列,月份是 2,它应该创建一个名为“February”的列。
这是我尝试过但没有运气的查询。
SELECT
SUM(case when extract(month() from timestamp) = 1 and extract(year() from timestamp) = '2018' then total else 0 end ) as January ,
SUM(case when extract(month() from timestamp) = 2 and extract(year() from timestamp) = '2018' then total else 0 end ) as February, and so on until December..
FROM x;
Run Code Online (Sandbox Code Playgroud)
Sti*_*ian 14
回答问题的标题,因为其他人可能会像我一样在这里寻找一种从 BigQuery 时间戳创建 YYYYMM 年-月的方法。
这是我在标准 SQL 中最终得到的代码:
CONCAT(CAST(EXTRACT(YEAR from timestamp) as string), LPAD(CAST(EXTRACT(MONTH from timestamp) as string),2,'0') ) as yearmonth
我猜你正在寻找这个
SELECT
FORMAT_DATETIME('%B', DATETIME '2008-12-25 15:30:00')
AS formatted;
Run Code Online (Sandbox Code Playgroud)
因此DATETIME,要将字符串转换为日期时间格式并format_datetime()获取月份名称
以下是 BigQuery StandardSQL
#standardsQL
CREATE TEMP FUNCTION monthValue(ts TIMESTAMP, m INT64, y INT64, value INT64) AS (
IF(EXTRACT(MONTH FROM ts) = m AND EXTRACT(YEAR FROM ts) = y, value, 0)
);
SELECT
SUM(monthValue(timestamp, 1, 2018, total)) AS January,
SUM(monthValue(timestamp, 2, 2018, total)) AS February,
SUM(monthValue(timestamp, 3, 2018, total)) AS March,
SUM(monthValue(timestamp, 4, 2018, total)) AS April,
SUM(monthValue(timestamp, 5, 2018, total)) AS May,
SUM(monthValue(timestamp, 6, 2018, total)) AS June,
SUM(monthValue(timestamp, 7, 2018, total)) AS July,
SUM(monthValue(timestamp, 8, 2018, total)) AS August,
SUM(monthValue(timestamp, 9, 2018, total)) AS September,
SUM(monthValue(timestamp, 10, 2018, total)) AS October,
SUM(monthValue(timestamp, 11, 2018, total)) AS November,
SUM(monthValue(timestamp, 12, 2018, total)) AS December
FROM
`yourproject.yourdataset.yourtable`
Run Code Online (Sandbox Code Playgroud)
我们可以在旧版 SQL 中执行此操作吗?
对于旧版 SQL,请参阅下文
#legacySQL
SELECT
SUM(IF(MONTH(timestamp) = 1 AND YEAR(timestamp) = 2018, total, 0)) AS January,
SUM(IF(MONTH(timestamp) = 2 AND YEAR(timestamp) = 2018, total, 0)) AS February,
SUM(IF(MONTH(timestamp) = 3 AND YEAR(timestamp) = 2018, total, 0)) AS March,
SUM(IF(MONTH(timestamp) = 4 AND YEAR(timestamp) = 2018, total, 0)) AS April,
SUM(IF(MONTH(timestamp) = 5 AND YEAR(timestamp) = 2018, total, 0)) AS May,
SUM(IF(MONTH(timestamp) = 6 AND YEAR(timestamp) = 2018, total, 0)) AS June,
SUM(IF(MONTH(timestamp) = 7 AND YEAR(timestamp) = 2018, total, 0)) AS July,
SUM(IF(MONTH(timestamp) = 8 AND YEAR(timestamp) = 2018, total, 0)) AS August,
SUM(IF(MONTH(timestamp) = 9 AND YEAR(timestamp) = 2018, total, 0)) AS September,
SUM(IF(MONTH(timestamp) = 10 AND YEAR(timestamp) = 2018, total, 0)) AS October,
SUM(IF(MONTH(timestamp) = 11 AND YEAR(timestamp) = 2018, total, 0)) AS November,
SUM(IF(MONTH(timestamp) = 12 AND YEAR(timestamp) = 2018, total, 0)) AS December
FROM [yourproject:yourdataset.yourtable]
Run Code Online (Sandbox Code Playgroud)
注意:BigQuery 团队强烈推荐migrate to Standard SQL
小智 5
你可以试试:
SELECT CONCAT(CAST(EXTRACT(YEAR FROM DATE (OrderDate)) AS STRING),"-",CAST(EXTRACT(MONTH FROM DATE (OrderDate)) AS STRING)) AS yyyy_mm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32163 次 |
| 最近记录: |