如何在 postgres(Amazon redshift)中将 sas 日期格式转换为 int?
How to convert FROM sas date format TO int in postgres (Amazon redshift)?
请耐心等待,因为我没有记下单词。我正在使用带有 postgresql 的 Navicat 将 SAS 日期转换为 int。我已经成功使用
DATEADD(day,round(field_name)::int,'19600101') -> where field_name = '-8705' stored
as varchar(256)
用于正数,但这不适用于负数(1960 年 1 月 1 日之前)。理想情况下,有人有 better/easier/more 从 SAS 日期转换的有效方法,但我将很感激将这些负数转换为 int 的方法。我已经搜索了 Amazon Redshift 文档,如果答案在那里我不明白。如果可能的话,我从例子中学得最好。
这个例子看起来很有希望,但我不知道如何让它适合我的情况:
SELECT total_days
, CAST(end_date AS timestamp) t_stamp
, CAST(end_date AS date) final_date_time
-- date(end_date) will not work as end_date is date already
, TO_CHAR(TRUNC(end_date), 'MM/DD/YYYY') final_date
FROM(
SELECT ROUND(1344444527/60/60/24) total_days
, TO_DATE('01-01-1960','dd-mm-yyyy') start_date
, TO_DATE('01-01-1960','dd-mm-yyyy')+ (1344444527/60/60/24) end_date
FROM dual
)
在此先感谢您的帮助!!
它以原始格式返回数据,但我 运行 再次检查它,现在它可以工作了。我不知道为什么它最初不起作用。可能是用户错误。谢谢你的评论!!
请耐心等待,因为我没有记下单词。我正在使用带有 postgresql 的 Navicat 将 SAS 日期转换为 int。我已经成功使用
DATEADD(day,round(field_name)::int,'19600101') -> where field_name = '-8705' stored
as varchar(256)
用于正数,但这不适用于负数(1960 年 1 月 1 日之前)。理想情况下,有人有 better/easier/more 从 SAS 日期转换的有效方法,但我将很感激将这些负数转换为 int 的方法。我已经搜索了 Amazon Redshift 文档,如果答案在那里我不明白。如果可能的话,我从例子中学得最好。
这个例子看起来很有希望,但我不知道如何让它适合我的情况:
SELECT total_days
, CAST(end_date AS timestamp) t_stamp
, CAST(end_date AS date) final_date_time
-- date(end_date) will not work as end_date is date already
, TO_CHAR(TRUNC(end_date), 'MM/DD/YYYY') final_date
FROM(
SELECT ROUND(1344444527/60/60/24) total_days
, TO_DATE('01-01-1960','dd-mm-yyyy') start_date
, TO_DATE('01-01-1960','dd-mm-yyyy')+ (1344444527/60/60/24) end_date
FROM dual
)
在此先感谢您的帮助!!
它以原始格式返回数据,但我 运行 再次检查它,现在它可以工作了。我不知道为什么它最初不起作用。可能是用户错误。谢谢你的评论!!