Azure Synapse Pipeline日期表达式:周一/周二仍返回上周一
解决方案
你可以通过Azure表达式的if条件判断实现需求,以下是优化后的代码:
@{formatDateTime( subtractFromTime( utcNow(), if( lessOrEquals(dayOfWeek(utcNow()), 2), add(sub(dayOfWeek(utcNow()),1),7), sub(dayOfWeek(utcNow()),1) ), 'Day' ), 'yyyy-MM-dd 00:00:00' )}
逻辑说明
- 星期判断:使用
lessOrEquals(dayOfWeek(utcNow()), 2)识别当前是周一(dayOfWeek返回1)或周二(返回2) - 天数计算:
- 若为周一/周二:在原本计算到本周一的天数(
sub(dayOfWeek(utcNow()),1))基础上加7天,得到到上周一的总天数 - 若为其他日期(周三到周日):保持原逻辑,计算到本周一的天数
- 若为周一/周二:在原本计算到本周一的天数(
- 格式化输出:最后统一将日期格式化为
yyyy-MM-dd 00:00:00
简化易读写法
也可以用变量提取公共逻辑,让代码更清晰:
@{ var dow = dayOfWeek(utcNow()); var daysToSubtract = if(lessOrEquals(dow, 2), dow + 6, dow - 1); formatDateTime(subtractFromTime(utcNow(), daysToSubtract, 'Day'), 'yyyy-MM-dd 00:00:00') }
内容的提问来源于stack exchange,提问作者mullinsjo
相关产品推荐
相关产品推荐

