SAS Proc SQL 日期时间函数解析时间是多少?

问题描述 投票:0回答:1

在下面的代码中:

proc sql;
    select 
        datetime() format = datetime22.5, 
        datetime() format = datetime22.5, 
        case
            when datetime() = datetime() then 'equal'
            else 'no equal'
        end
    from data1 (obs=1);
quit;

是否有 any 选项,所有

datetime()
调用都会解析为略有不同的时间戳?

在数据步骤中,所有指令都依次运行,因此在后续行中放置多个

datetime()
调用最终会返回小数点位置不同的时间戳。 SQL 调用中是否存在类似的风险,或者所有
datetime()
调用是否同时得到解决?

我想确认,在单个 SQL 步骤中放置多个

datetime()
调用不会在毫秒内解决差异。

sql sas
1个回答
0
投票

没有选项强制每次使用

datetime
函数返回唯一值。此外,
SQL
规划器可能正在执行一些未知的优化,从而导致体验相同。

如果您需要此类严格的单调值,请考虑为每个日期时间结果添加额外的关联单调变量。

示例

在步骤运行时使用未记录的

monotonic()
函数可能会很棘手。

这并不提供人们可能认为的独特性。

proc sql;
    select 
        datetime() format = datetime22.5, 
        datetime() format = datetime22.5, 
        case
            when datetime() = datetime() then 'equal'
            else 'no equal'
        end
    from sashelp.class(obs=1);
quit;

在编译时使用通过 %sysfunc 获得的

session
唯一单调值即可。

proc sql;
    select 
        datetime() format = datetime22.5, %sysfunc(monotonic()) as dt1_m,
        datetime() format = datetime22.5, %sysfunc(monotonic()) as dt2_m,
        case
            when datetime() = datetime() and %sysfunc(monotonic())=%sysfunc(monotonic()) then 'equal'
            else 'no equal'
        end
    from sashelp.class (obs=1);

quit;

在 Windows 平台中,

datetime()
函数的替代方法是使用
moduleN()
函数调用系统例程
GetSystemTimePreciseAsFileTime

GetSystemTimePreciseAsFileTime 函数以尽可能高的精度检索当前系统日期和时间 (<1us)

© www.soinside.com 2019 - 2024. All rights reserved.