使用直通查询将Oracle number (YYYYMMDD)格式化为SAS date9



如何将存储为数字(长度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。格式。

相关内容

  • 没有找到相关文章

最新更新