【问题标题】:Macro's in PROC DB2EXT Queries?PROC DB2EXT 查询中的宏?
【发布时间】:2018-07-11 10:21:49
【问题描述】:

是否可以将宏变量放入 PROC DB2EXT 查询中?

这行得通:

WHERE SDD BETWEEN '01.05.2018' AND '30.05.2018'

但是我所有插入宏变量的尝试都导致错误

宏声明

/* Statement in SAS, declaring the Macro, and transfering in to the remote session */
%let month =    05;
%SYSLPUT MONTH  =   &month;
%PUT &MONTH; 

DB2EXT SQL

/* Error(-180): DSN00180E THE DATE, TIME, OR TIMESTAMP VALUE 01."&month.".2018 IS INVALID  */
WHERE SDD BETWEEN '01."&month.".2018' AND '30.05.2018'

/* Error(-206): DSN00206E 01.MAY.2018 IS NOT VALID IN THE CONTEXT WHERE IT IS USED */
WHERE SDD BETWEEN "01.&month..2018" AND '30.05.2018'

/* Futile attemps */
WHERE SDD BETWEEN '01&month2018' AND '30.05.2018'
WHERE SDD BETWEEN '01month2018' AND '30.05.2018'

【问题讨论】:

  • 尝试在 DB2EXT 查询中使用 ISO 格式的文字值,即文字最终看起来像 'YYYY-MM-DD'(对于日期文字)。

标签: sql sas db2 sas-macro


【解决方案1】:

在生成需要包含评估宏变量的单引号文字时,使用以下构造:

%str(%')macro-evaluation%str(%')

忽略上面代码的稍微奇怪的堆栈溢出(SO)着色。 SO 渲染器无法将单引号解读为 %str() 闭包的一部分

所以你的情况可能是

%str(%`)01&month.2018%str(%')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多