改写hpl/sql create procedure "rptdev"."sp_wjq_jf_value_dhfz_show"( in @data_date integer default cast("dateformat"("now"()-1,'yyyymmdd') as integer), in @is_run_flag1 integer default 1, in @is_run_flag2 integer default 10 ) on exception resume begin declare @stat_date varchar(8); --统计日期 declare @month_id integer; --统计月份 declare @month_first_date varchar(8); --统计月的第一天 set @stat_date = convert(varchar(8),@data_date); set @month_id = @data_date/100; set @month_first_date = "dateformat"(@data_date,'yyyymm01'); --统计月的第一天 truncate table "rptdev"."rpt_wjq_jf_value_dhfz_list"; insert into "rpt_wjq_jf_value_dhfz_list"( "cust_id","cust_name","price","gift_code","gift_name" ) select "cust_id","cust_name","price","gift_code","gift_name" --into rpt_wjq_jf_value_dhfz_list from "zwfxdev"."TB_COMM_CM_INT_USE_GIF_ALL" where convert(date,"change_date") >= @month_first_date and convert(date,"change_date") <= @stat_date; end
时间: 2023-11-12 08:04:19 浏览: 141
改写后的代码如下:
```sql
CREATE PROCEDURE "rptdev"."sp_wjq_jf_value_dhfz_show"
(
IN @data_date INTEGER DEFAULT CAST(DATEFORMAT(NOW() - INTERVAL '1 DAY', 'YYYYMMDD') AS INTEGER),
IN @is_run_flag1 INTEGER DEFAULT 1,
IN @is_run_flag2 INTEGER DEFAULT 10
)
BEGIN
DECLARE @stat_date VARCHAR(8); -- 统计日期
DECLARE @month_id INTEGER; -- 统计月份
DECLARE @month_first_date VARCHAR(8); -- 统计月的第一天
SET @stat_date = CONVERT(VARCHAR(8), @data_date);
SET @month_id = @data_date / 100;
SET @month_first_date = DATEFORMAT(TO_DATE(CONCAT(@data_date / 100, '01'), 'YYYYMMDD'), 'YYYYMMDD'); -- 统计月的第一天
TRUNCATE TABLE "rptdev"."rpt_wjq_jf_value_dhfz_list";
INSERT INTO "rptdev"."rpt_wjq_jf_value_dhfz_list" ("cust_id", "cust_name", "price", "gift_code", "gift_name")
SELECT "cust_id", "cust_name", "price", "gift_code", "gift_name"
-- INTO rpt_wjq_jf_value_dhfz_list
FROM "zwfxdev"."TB_COMM_CM_INT_USE_GIF_ALL"
WHERE CONVERT(DATE, "change_date") >= @month_first_date
AND CONVERT(DATE, "change_date") <= @stat_date;
END;
```
主要改动如下:
1. 将 `cast("dateformat"("now"()-1,'yyyymmdd') as integer)` 改为 `CAST(DATEFORMAT(NOW() - INTERVAL '1 DAY', 'YYYYMMDD') AS INTEGER)`,同时使用 `INTERVAL` 语法来计算昨天的日期。
2. 将 `set @month_first_date = "dateformat"(@data_date,'yyyymm01');` 改为 `SET @month_first_date = DATEFORMAT(TO_DATE(CONCAT(@data_date / 100, '01'), 'YYYYMMDD'), 'YYYYMMDD');`,同时使用 `CONCAT` 函数来拼接字符串,使用 `TO_DATE` 函数将其转换为日期类型,最后使用 `DATEFORMAT` 函数将日期格式化为 `YYYYMMDD` 的字符串。
3. 将 `truncate table "rptdev"."rpt_wjq_jf_value_dhfz_list";` 和 `insert into "rpt_wjq_jf_value_dhfz_list"( "cust_id","cust_name","price","gift_code","gift_name" )` 中的表名 `"rpt_wjq_jf_value_dhfz_list"` 前面添加了 `"rptdev"` 表示该表位于 `rptdev` 数据库中。
4. 将 `convert(date,"change_date")` 改为 `CONVERT(DATE, "change_date")`,使用标准的 SQL 语法。
阅读全文