【问题标题】:SAS macro date variable to convert into yyyy-mm-dd format for SAS HiveQL要转换为 SAS HiveQL 的 yyyy-mm-dd 格式的 SAS 宏日期变量
【发布时间】:2018-12-11 09:45:04
【问题描述】:

我正在尝试设置自动宏变量日期以在 SAS HiveQL 中运行脚本

对于标准 SAS 查询,我通常会使用类似的内容:

%let start_date = %sysfunc(intnx(month, "&sysdate"d, -1, B));

但是我需要将日期转换为 yyyy-mm-dd 格式来运行 HiveQL 查询。

在设置宏变量时不确定如何将 SAS 日期转换为这种格式。

欢迎任何帮助。

【问题讨论】:

    标签: date hive sas hiveql


    【解决方案1】:

    使用%sysfunc()时可以指定格式:

    %let start_date = %sysfunc(intnx(month, "&sysdate"d, -1, B), yymmdd10.);
    

    【讨论】:

    • 没有意识到可以指定格式.....在这种情况下,当使用 Week 时,它默认为星期日,我需要星期一。我会简单地 +1 来确定那个日期,但根据上述情况,我将如何做到这一点?
    • 这确实是一个单独的问题,但您尝试过week.2 吗?
    • 为厚脸皮道歉!我在第 2 周放置了引号,这不起作用,没有它的工作。感谢之前和这个!
    【解决方案2】:

    对于夜猫子,自动宏变量 sysdate 是 SAS 会话开始的日期。长时间运行的会话可能需要使用函数 today() 来获取当前日期。

    远程传递日期文字也需要单引号。

    %let   remoteDateLiteralForPassThrough = %str(%')%sysfunc(putn(%sysfunc(today()),yymmdd10.))%str(%');
    %put &=remoteDateLiteralPassThrough;
    
    %let   remoteDateTimeLiteralForPassThro = %str(%')%sysfunc(putn(%sysfunc(today()),yymmdd10.))T0:0:0%str(%');
    %put &=remoteDateTimeLiteralForPassThro;
    

    添加:上个月的第一天为'yyyy-mm-dd'

    %let start_date_num = %sysfunc(intnx(month, %sysfunc(today()), -1, B));
    %let db_start_date = %str(%')%sysfunc(putn(&start_date_num,yymmdd10.))%str(%');
    

    【讨论】:

    • 如何修改以获得上个月的第一天?
    • 非常感谢。在玩了之后,我发现这也可以作为一个衬里:%let start_date = %str(%')%sysfunc(intnx(month, "&sysdate"d, -1, B), yymmdd10.)%str(%');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多