Elm*_*Elm 18 sql generate-series amazon-redshift
我想在redshift中使用generate系列函数,但还没有成功.
redshift文档说它不受支持.以下代码确实有效:
select *
from generate_series(1,10,1)
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
...
10
Run Code Online (Sandbox Code Playgroud)
我想对约会做同样的事情.我尝试了很多变种,包括:
select *
from generate_series(date('2008-10-01'),date('2008-10-10 00:00:00'),1)
Run Code Online (Sandbox Code Playgroud)
踢出去:
ERROR: function generate_series(date, date, integer) does not exist
Hint: No function matches the given name and argument types.
You may need to add explicit type casts. [SQL State=42883]
Run Code Online (Sandbox Code Playgroud)
还尝试过:
select *
from generate_series('2008-10-01 00:00:00'::timestamp,
'2008-10-10 00:00:00'::timestamp,'1 day')
Run Code Online (Sandbox Code Playgroud)
并试过:
select *
from generate_series(cast('2008-10-01 00:00:00' as datetime),
cast('2008-10-10 00:00:00' as datetime),'1 day')
Run Code Online (Sandbox Code Playgroud)
两个都踢了出来:
ERROR: function generate_series(timestamp without time zone, timestamp without time zone, "unknown") does not exist
Hint: No function matches the given name and argument types.
You may need to add explicit type casts. [SQL State=42883]
Run Code Online (Sandbox Code Playgroud)
如果看起来不像我将从另一篇文章中使用此代码:
SELECT to_char(DATE '2008-01-01'
+ (interval '1 month' * generate_series(0,57)), 'YYYY-MM-DD') AS ym
Run Code Online (Sandbox Code Playgroud)
Mik*_*ll' 18
Amazon Redshift似乎基于PostgreSQL 8.0.2.generate_series()的时间戳参数在8.4中添加.
这样可以回避这个问题的东西可能会在Redshift中起作用.
SELECT current_date + (n || ' days')::interval
from generate_series (1, 30) n
Run Code Online (Sandbox Code Playgroud)
它适用于PostgreSQL 8.3,这是我可以测试的最早版本.它记录在8.0.26中.
后来...
似乎在Redshift中不支持generate_series().但鉴于你已经证实它select * from generate_series(1,10,1) 确实有效,上面的语法至少会给你一个战斗机会.(虽然间隔数据类型也记录为在Redshift上不受支持.)
还是晚一点...
您还可以创建一个整数表.
create table integers (
n integer primary key
);
Run Code Online (Sandbox Code Playgroud)
随便填充它.您可以在本地使用generate_series(),转储表并在Redshift上加载它.(我不知道;我不使用Redshift.)
无论如何,您可以使用该表进行简单的日期算术,而无需直接引用generate_series()或间隔数据类型.
select (current_date + n)
from integers
where n < 31;
Run Code Online (Sandbox Code Playgroud)
至少在8.3中有效.
Gab*_*own 13
今天使用Redshift,您可以使用日期时间函数生成一系列日期并输入数字表.
select (getdate()::date - generate_series)::date from generate_series(1,30,1)
Run Code Online (Sandbox Code Playgroud)
为我生成这个
date
2015-11-06
2015-11-05
2015-11-04
2015-11-03
2015-11-02
2015-11-01
2015-10-31
2015-10-30
2015-10-29
2015-10-28
2015-10-27
2015-10-26
2015-10-25
2015-10-24
2015-10-23
2015-10-22
2015-10-21
2015-10-20
2015-10-19
2015-10-18
2015-10-17
2015-10-16
2015-10-15
2015-10-14
2015-10-13
2015-10-12
2015-10-11
2015-10-10
2015-10-09
2015-10-08
Run Code Online (Sandbox Code Playgroud)
generate_series()Redshift不完全支持该功能.请参阅开发人员指南的不支持的PostgreSQL函数部分.
UPDATE
generate_series现在正在使用Redshift.
SELECT CURRENT_DATE::TIMESTAMP - (i * interval '1 day') as date_datetime
FROM generate_series(1,31) i
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)
这将生成最近30天的日期
参考:Amazon Redshift中的generate_series函数
| 归档时间: |
|
| 查看次数: |
23170 次 |
| 最近记录: |