如何将存储为数字(长度8,格式20)的日期从Oracle (YYYYMMDD)转换为SAS传递查询中的date9
格式?
我试过to_char(f_date)
和to_date(to_char(f_date),'YYYYMMDD')
但我不知道如何在passthrough查询中应用SAS格式(date9.)现在
正如你所说:
- 如果您通过
20221130
- 你想要得到
30NOV2022
然后
SQL> select to_char (to_date ('20221130', 'yyyymmdd'), 'ddMONyyyy', 'nls_date_language=english') result
2 from dual;
RESULT
---------
30NOV2022
SQL>
如果f_date
是日期,那么您可以将其转换为您想要的格式的字符串:
to_char(f_date, 'DDMONYYYY', 'nls_date_language=english')
如果它是一个数字——它不应该是数字——那么你需要先把它转换成一个日期:
to_char(to_date(to_char(f_date), 'YYYYMMDD'), 'DDMONYYYY', 'nls_date_language=english')
在这两种情况下,我都将可选的第三个参数包含到to_char()
中,以便无论用户会话设置如何,都将月份缩写强制为英语。
小提琴
在Oracle端,您可以使用TO_DATE()函数将其转换为DATE值。您可能需要首先使用TO_CHAR()函数将number转换为字符串。
在SAS端,您应该看到一个DATE值。如果您将其视为DATETIME值,那么您可以尝试使用DBSASTYPE= dataset选项告诉SAS您希望将变量创建为DATE类型值(天数)而不是DATETIME类型值(秒数)。或者使用DATEPART()函数将其转换为SAS端的日期值如果您将其作为您描述的数字拉过(即今天的日期30NOV2022将是数字20,221,130),那么您可以使用INPUT()和PUT()函数将其转换为SAS端的日期值。
date = input(put(date,z8.),yymmdd8.);
一旦您将其作为SAS端的日期值,您就可以附加任何知道如何以人类可以理解的方式显示日期值的SAS格式。例如DATE9。格式。