Redshift中的NUMTODSINTERVAL。将数字转换为小时

时间:2018-04-05 11:52:40

标签: sql oracle timezone amazon-redshift timezone-offset

我的目标是抵消表 Date_times 中的时间戳以反映本地时区。我有一个 Timezone_lookup 表,我用它,它有一个列 utc_convert ,它的值是(2,-1,5等),具体取决于时区。

我以前在Oracle中使用import matplotlib.pyplot as plt import seaborn as sns iris = sns.load_dataset("iris") setosa = iris.loc[iris.species == "setosa"] virginica = iris.loc[iris.species == "virginica"] g = sns.JointGrid(x="sepal_width", y="petal_length", data=iris) sns.kdeplot(setosa.sepal_width, setosa.sepal_length, cmap="Reds", shade=False, shade_lowest=False, ax=g.ax_joint, linestyles="--") sns.kdeplot(virginica.sepal_width, virginica.sepal_length, cmap="Blues", shade=False, shade_lowest=False, ax=g.ax_joint, linestyles=":") sns.kdeplot(setosa.sepal_width, color="r", legend=False, ax=g.ax_marg_x, linestyle="--") sns.kdeplot(virginica.sepal_width, color="b", legend=False, ax=g.ax_marg_x, linestyle=":") sns.kdeplot(setosa.sepal_length, color="r", legend=False, ax=g.ax_marg_y, vertical=True, linestyle="--") sns.kdeplot(virginica.sepal_length, color="b", legend=False, ax=g.ax_marg_y, vertical=True, linestyle=":") plt.show() 能够将 utc_convert 值转换为小时数,因此我可以在 Date_times 中添加/减去日期时间表

对于Redshift,我找到NUMTODSINTERVAL,但这只是用特定数字硬编码偏移量。

我也尝试过:

INTERVAL

但是这不起作用,因为 utc_convert 列中的某些数字具有负值。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试将偏移乘以间隔:

select current_timestamp + utc_convert * interval '1 hour'

答案 1 :(得分:0)

在Oracle中,您可以使用用户会话的时区(这意味着您无需维护时区查找表或补偿夏令时)。

SELECT FROM_TZ( your_timestamp_column, 'UTC' ) AT LOCAL
FROM   Date_times

SQLFIDDLE

在RedShift中,您应该能够使用CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')功能,而不是添加多个间隔。这将允许您将target_timezone指定为UTC的数字偏移量或时区名称(这将自动补偿DST)。