SQL动态参数
每一位业务分析师都在数据平台搭建过看板吧,搭看板就涉及到例行化任务,即定时跑SQL更新看板数据。回想这么多年,搭建过的看板上百个不成问题,写过的sql上千个不成问题。尤其是来到一个新成立的数据分析部,刚巧这个部门起步只有你一个人,那这时你会体验到搭看板搭到手抽筋的酸胀感。
言归正传,那问题就来了,SQL条件中比如日期怎么更新呢,每天手动改多费心力。
还有一个使用场景,你写了一个几百行的Sql(某种意义上来说,分析师写SQL超过10行就是底层数据做的不好,不过实际工作中SQL写上上百行那是常有的事情),这个SQL要根据不同的条件跑多次,且条件在sql中多处用到,如果写死在SQL中每次修改,改的多且容易改错。
怎么办?
叮咚,动态参数功能就是来解决这个问题的,让你写一次SQL,搭一次看板,后续看板自动会更新数据;让你写一个上百行的SQL,只需要填写一次条件,就可以执行跑出来相应条件的数据。
接下来咱们一起了解一下动态参数吧~
动态参数有两种:
(一)系统内置动态参数,主要为对时间进行处理的参数
系统内置参数可以在代码中直接使用,常用的内置参数:
假设当前时间为2023年6月8日
① 获取今天的日期
${today}
输出:20230608
② 获取昨日日期
${yesterday}
输出:20230607
③ 获取当月的第一天
${today.minDay}
输出:20230601
④ 获取当月的最后一天
${today.maxDay}
输出:20230630
⑤获取当前时间
'${now}'
输出2023-06-08 14:59:29
注意:这里要加上加上'',加上后就转成字符串格式了,有分秒的时间格式是字符串格式要加上''才能跑出来。
增减周期:"(+/-)(周期值)(周期单位) y":年"M":月"w":周"d":天"h":时"m":分"s":秒
① 上个月的同一天
${today-1M}
输出:20250508
② 下一周的同一天
${today+1w}
输出:20230615
③ 组合处理,各函数支持相互组合处理,比如取这个月的第3天的最后三小时的截止时间
'${yyyyMMdd HH:mm:ss.minDay+2d.maxTime-2h}'
输出:20230603 21:59:59
实际使用案例:查询A表昨日的成交记录数
select count(1) as cntfrom A表where dt=${yesterday}
(二)用户自定义动态参数,自定义参数需要在运行参数中手动赋值
一般是手动跑数据,多处地方用到一个参数,如果写死在SQL里每次改动不方便,为了解决这个问题,可自定义参数,输入一个值可给所有该参数赋值。
案例:比如查询A表昨日xx城市的成交记录数
select count(1) as cntfrom A表where dt=${yesterday}and city=${city_name}
此时,这个${city_name}就是用户自定义参数,跑数据的时候需要输入参数,比如北京市,才能跑出来该城市的数据。
版权保护: 本文由 绿茶加糖-郭保升 原创,转载请保留链接: https://www.guobaosheng.com/shujuku/400.html
