All checks were successful
Build and Deploy / deploy (push) Successful in 1m2s
Co-authored-by: Cursor <cursoragent@cursor.com>
67 lines
2.5 KiB
SQL
67 lines
2.5 KiB
SQL
-- 存量库:分区明细增加匹配维度/方式/前缀长度(可重复执行)
|
||
SET @db := DATABASE();
|
||
|
||
SET @col := (
|
||
SELECT COUNT(1)
|
||
FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = @db
|
||
AND TABLE_NAME = 't_kpi_area_info'
|
||
AND COLUMN_NAME = 'MatchDim'
|
||
);
|
||
SET @sql := IF(
|
||
@col = 0,
|
||
'ALTER TABLE `t_kpi_area_info`
|
||
ADD COLUMN `MatchDim` VARCHAR(16) NOT NULL DEFAULT ''country'' COMMENT ''匹配维度:zip/state/city/country'' AFTER `RightPostcode`,
|
||
ADD COLUMN `MatchMode` VARCHAR(16) NOT NULL DEFAULT ''all'' COMMENT ''匹配方式:prefix/exact/range/all'' AFTER `MatchDim`,
|
||
ADD COLUMN `PrefixLen` INT NOT NULL DEFAULT 0 COMMENT ''邮编前缀长度(zip+prefix)'' AFTER `MatchMode`',
|
||
'SELECT ''kpi area match columns already exist'' AS info'
|
||
);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
SET @idx := (
|
||
SELECT COUNT(1)
|
||
FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = @db
|
||
AND TABLE_NAME = 't_kpi_area_info'
|
||
AND INDEX_NAME = 'idx_kpi_info_area_dim'
|
||
);
|
||
SET @sql := IF(
|
||
@idx = 0,
|
||
'ALTER TABLE `t_kpi_area_info` ADD KEY `idx_kpi_info_area_dim` (`AreaId`, `CountryCode`, `MatchDim`)',
|
||
'SELECT ''idx_kpi_info_area_dim already exists'' AS info'
|
||
);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
UPDATE `t_kpi_area_info`
|
||
SET
|
||
`MatchDim` = CASE
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' OR IFNULL(`RightPostcode`, '') <> '' THEN 'zip'
|
||
WHEN IFNULL(`City`, '') <> '' THEN 'city'
|
||
WHEN IFNULL(`Province`, '') <> '' THEN 'state'
|
||
ELSE 'country'
|
||
END,
|
||
`MatchMode` = CASE
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' AND IFNULL(`RightPostcode`, '') = '' THEN 'prefix'
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' AND `LeftPostcode` = `RightPostcode` THEN 'exact'
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' AND IFNULL(`RightPostcode`, '') <> '' THEN 'range'
|
||
WHEN IFNULL(`City`, '') <> '' OR IFNULL(`Province`, '') <> '' THEN 'exact'
|
||
ELSE 'all'
|
||
END,
|
||
`PrefixLen` = CASE
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' AND IFNULL(`RightPostcode`, '') = '' THEN CHAR_LENGTH(`LeftPostcode`)
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' AND `LeftPostcode` = `RightPostcode` THEN CHAR_LENGTH(`LeftPostcode`)
|
||
WHEN IFNULL(`LeftPostcode`, '') <> '' AND IFNULL(`RightPostcode`, '') <> '' THEN LEAST(CHAR_LENGTH(`LeftPostcode`), CHAR_LENGTH(`RightPostcode`))
|
||
ELSE 0
|
||
END
|
||
WHERE IFNULL(`MatchDim`, '') IN ('', 'country')
|
||
AND (
|
||
IFNULL(`LeftPostcode`, '') <> ''
|
||
OR IFNULL(`RightPostcode`, '') <> ''
|
||
OR IFNULL(`Province`, '') <> ''
|
||
OR IFNULL(`City`, '') <> ''
|
||
);
|