sql - IF 语句创建宏变量
问题描述
我正在尝试根据外部表中包含的值创建一个宏变量。我目前正在使用这个:
PROC SQL NOPRINT;
SELECT compress("'" || put(MAX(CALL_DATE)+1 , DATE9.)|| "'")
into :start_date
FROM table.test
;
这为我提供了表中的最大日期为 '10OCT2018' 问题是,当我最初运行这个时,我的源表将没有最大值,因为它将是空白的,因此它评估为 '。我想做类似的事情:
PROC SQL NOPRINT;
SELECT IF compress("'" || put(MAX(CALL_DATE)+1 , DATE9.)|| "'") ='.' THEN
'10OCT2018' ELSE compress("'" || put(MAX(CALL_DATE)+1 , DATE9.)|| "'") END
into :start_date
FROM table.test
;
这将允许我在源表为空时填充变量,然后在使用数据更新后使用最大日期。
解决方案
只需测试原始值而不是 WHEN 子句中的格式化值。today()
当 max() 值丢失(或在 SQL 中为 null)时,而不是硬编码默认日期,而是使用该函数获取要使用的值。该quote()
函数可以添加引号。
如果该值来自远程数据库,则使用嵌套查询首先生成最大值,然后对其进行格式化。这将确保仅从远程数据库中提取最大值。
proc sql noprint;
select quote(put(
case when max_call_date is null then today() else max_call_date+1 end
,date9.),"'")
into :start_date
from (select max(call_date) as max_call_date from table.test)
;
quit;
推荐阅读
- node.js - 谷歌表格:我可以在一个请求中写出整个工作表吗?
- arrays - 如果 MongoDb 中尚不存在新元素,如何将新元素推入现有数组或创建一个?
- packer - Packer 自定义映像构建失败并出现 ssh 身份验证错误
- perl - Perl 命令查找模式并提取固定位置字段
- c - 如何在 XML 中使用逻辑条件?
- powershell - 无法在 Windows 2012 R2 机器上运行 Get-WindowsOptionalFeature 命令
- linux - 多次重复每一行并添加升序数字
- swift - Realm 和 UserDefaults - 应用程序版本和更新
- python - QItemDelegate 跨列 QCalendarWidget 的呈现方式不同
- android - 输入两个值后,如何在第三个编辑文本中自动显示两个编辑文本值的结果?