所有内容均为测试可用,真实
当前位置:绿茶加糖-郭保升 > 数据库资料 > 正文

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 cnt from A表where dt=${yesterday} and city=${city_name}

此时,这个${city_name}就是用户自定义参数,跑数据的时候需要输入参数,比如北京市,才能跑出来该城市的数据。

版权保护: 本文由 绿茶加糖-郭保升 原创,转载请保留链接: https://www.guobaosheng.com/shujuku/400.html