客户生日提醒这样的功能粗想起来是不难的,毕竟生日就是一个日期嘛,粗想之下不就是SELECT* FROMtb_Customer WHEREBirthday>=@StartDate AND Birthday<=@EndDate 这样的SQL吗?但是因为生日是一个固定的日期,且我们每年都要进行提醒的。比如客户出生日期是1990-06-01,假设我们要提前3天提醒,那么比如每年的5-30号就要进行提醒05-30、05-31、06-01这3天过生日的客户了,这么想想是不是就会觉得又不是那么简单了?怎么处理呢?
我们的思路是动态构造WHERE条件:
SELECT* FROMtb_Customer WHEREBirthday>=CONCAT(YEAR(Birthday),'-05-30') ANDBirthday<= CONCAT(YEAR(Birthday),'-06-01')
上面的WHERE条件中的 CONCAT(YEAR(Birthday),'-05-30') 计算结果“1990-05-30”,CONCAT(YEAR(Birthday),'-06-01')的计算结果就是“1990-06-01”这不就是我们想要的WHERE条件吗?
问题的关键就是这CONCAT的第二个参数'-05-30'和'-06-01'怎么处理,因为每天都要进行提醒,那么这两个字符串应该是要根据“今天”动态构造的才行,构造这一段使用了我们“E6开发平台”的脚本:
SQL("CONCAT(YEAR(Birthday),")+("'"+Date2String(ToDay(),"-MM-dd")+"')")
SQL("CONCAT(YEAR(Birthday),")+("'"+Date2String(ToDay(10),"-MM-dd")+"')")
上面这两段脚本中“红色”的是SQL的函数(如CONCAT,YEAR),绿色的是E6的脚本(如SQL、Date2String、ToDay)
E6脚本:
SQL:SQL脚本中的参数会进行计算后会输出,且SQL输出在SQL查询时不会“参数化”处理(慎用);
ToDay:E6脚本,取今天的日期,返回值是yyyy-MM-dd格式;
Date2String:E6中对日期进行格式化的脚本,比如假设今天时2023-06-01,那么Date2String(ToDay(),"-MM-dd")返回就是“-06-01”
如在首页提醒任务中(下图中很多提醒任务,其中红框的为客户生日提醒任务)的属性中设置“初始显示条件”:
初始显示条件:
设置完成保存发布后,如果最近几天由过生日的客户则会进行提醒