-- ============================================================================
|
-- service_subtask 字段改名(出院维度 → leavel*,复用 sendlimit* 空列 → 在院病区 / 在院科室)
|
-- 生成日期:2026-11-06
|
-- 适用:MySQL 8.0(本仓库 SQL 用到 JSON_TABLE;5.7 见文末「兼容写法」)
|
--
|
-- 改名映射:
|
-- deptcode → leaveldeptcode (原有语义 = 出院科室)
|
-- deptname → leaveldeptname
|
-- sendlimitabegin → hospitaldistrictcode(原「上午开始发送时间限制」,4 列均未被业务读写)
|
-- sendlimitaend → hospitaldistrictname(复用为「在院病区」,同 pat_med_inhosp.hospitaldistrictcode)
|
-- sendlimitpbegin → deptcode (复用为「在院科室」)
|
-- sendlimitpend → deptname
|
-- sendlimitnbegin / sendlimitnend → 保留不动
|
--
|
-- ⚠️ 顺序不能颠倒:先把 deptcode/deptname 腾出来,再把 sendlimit* 改成这两个名字。
|
-- ⚠️ RENAME COLUMN 原地保留数据,旧数据的出院科室会自动跟到 leaveldeptcode/leaveldeptname。
|
-- ============================================================================
|
|
-- ----------------------------------------------------------------------------
|
-- 0) 先看现状(把结果贴出来,核对长度/类型、确认 sendlimit* 是否存在)
|
-- ----------------------------------------------------------------------------
|
SHOW FULL COLUMNS FROM service_subtask LIKE '%dept%';
|
SHOW FULL COLUMNS FROM service_subtask LIKE 'sendlimit%';
|
SHOW FULL COLUMNS FROM pat_med_inhosp LIKE '%leaveldept%';
|
|
-- ----------------------------------------------------------------------------
|
-- 0.5) 备份(可选但强烈建议)
|
-- ----------------------------------------------------------------------------
|
-- CREATE TABLE bak_service_subtask_rename_20261106 LIKE service_subtask;
|
-- INSERT INTO bak_service_subtask_rename_20261106 SELECT * FROM service_subtask;
|
|
-- ----------------------------------------------------------------------------
|
-- 1) 出院维度改名(腾出 deptcode / deptname 两个名字)
|
-- ----------------------------------------------------------------------------
|
ALTER TABLE service_subtask
|
RENAME COLUMN deptcode TO leaveldeptcode,
|
RENAME COLUMN deptname TO leaveldeptname;
|
|
-- ----------------------------------------------------------------------------
|
-- 2) 4 个空闲列改成新语义
|
-- ----------------------------------------------------------------------------
|
ALTER TABLE service_subtask
|
RENAME COLUMN sendlimitabegin TO hospitaldistrictcode,
|
RENAME COLUMN sendlimitaend TO hospitaldistrictname,
|
RENAME COLUMN sendlimitpbegin TO deptcode,
|
RENAME COLUMN sendlimitpend TO deptname;
|
|
-- ----------------------------------------------------------------------------
|
-- 3) 长度/类型校准(必须)
|
-- RENAME COLUMN 会沿用 sendlimit* 原来的类型(通常是 VARCHAR(10) 甚至 TIME),
|
-- 装在院科室/在院病区编码与名称会不够。下面按推荐长度放大,不会缩小已有列。
|
-- 若你库里 deptcode/deptname 原来是更长的 VARCHAR(255),请把 64/128 调大而不是调小。
|
-- ----------------------------------------------------------------------------
|
ALTER TABLE service_subtask
|
MODIFY COLUMN hospitaldistrictcode VARCHAR(64) NULL COMMENT '在院病区编码(原 sendlimitabegin)',
|
MODIFY COLUMN hospitaldistrictname VARCHAR(128) NULL COMMENT '在院病区名称(原 sendlimitaend)',
|
MODIFY COLUMN deptcode VARCHAR(64) NULL COMMENT '在院科室编码(原 sendlimitpbegin)',
|
MODIFY COLUMN deptname VARCHAR(128) NULL COMMENT '在院科室名称(原 sendlimitpend)';
|
|
-- ----------------------------------------------------------------------------
|
-- 3.5) 如果第 3 步之前已经执行过(列注释写成了「院区」),只修注释、不动数据:
|
-- ----------------------------------------------------------------------------
|
-- ALTER TABLE service_subtask
|
-- MODIFY COLUMN hospitaldistrictcode VARCHAR(64) NULL COMMENT '在院病区编码(原 sendlimitabegin)',
|
-- MODIFY COLUMN hospitaldistrictname VARCHAR(128) NULL COMMENT '在院病区名称(原 sendlimitaend)';
|
|
-- ----------------------------------------------------------------------------
|
-- 4) 清掉 sendlimit* 可能残留的时间串(如 '08:00:00')
|
-- 先 SELECT 确认这些列本来就无有效数据,再执行 UPDATE。
|
-- ----------------------------------------------------------------------------
|
-- SELECT COUNT(*) AS total,
|
-- SUM(hospitaldistrictcode IS NOT NULL AND hospitaldistrictcode <> '') AS hd_code,
|
-- SUM(hospitaldistrictname IS NOT NULL AND hospitaldistrictname <> '') AS hd_name,
|
-- SUM(deptcode IS NOT NULL AND deptcode <> '') AS dept_code,
|
-- SUM(deptname IS NOT NULL AND deptname <> '') AS dept_name
|
-- FROM service_subtask;
|
-- UPDATE service_subtask
|
-- SET hospitaldistrictcode = NULL, hospitaldistrictname = NULL,
|
-- deptcode = NULL, deptname = NULL;
|
|
-- ----------------------------------------------------------------------------
|
-- 5) 核对
|
-- ----------------------------------------------------------------------------
|
SHOW FULL COLUMNS FROM service_subtask LIKE '%dept%';
|
SHOW FULL COLUMNS FROM service_subtask LIKE 'hospitaldistrict%';
|
|
-- ============================================================================
|
-- 备选 A:sendlimit* 列在库里不存在(第 2 步报 1054)时,改成新增
|
-- ============================================================================
|
-- ALTER TABLE service_subtask
|
-- ADD COLUMN hospitaldistrictcode VARCHAR(64) NULL COMMENT '院区/病区编码',
|
-- ADD COLUMN hospitaldistrictname VARCHAR(128) NULL COMMENT '院区/病区名称',
|
-- ADD COLUMN deptcode VARCHAR(64) NULL COMMENT '科室编码(入院/在院维度)',
|
-- ADD COLUMN deptname VARCHAR(128) NULL COMMENT '科室名称(入院/在院维度)';
|
|
-- ============================================================================
|
-- 备选 B:MySQL 5.7(不支持 RENAME COLUMN)→ 用 CHANGE,定义要与原列一致
|
-- ============================================================================
|
-- ALTER TABLE service_subtask
|
-- CHANGE COLUMN deptcode leaveldeptcode <原 deptcode 类型> NULL COMMENT '出院科室编码',
|
-- CHANGE COLUMN deptname leaveldeptname <原 deptname 类型> NULL COMMENT '出院科室名称',
|
-- CHANGE COLUMN sendlimitabegin hospitaldistrictcode VARCHAR(64) NULL COMMENT '院区/病区编码',
|
-- CHANGE COLUMN sendlimitaend hospitaldistrictname VARCHAR(128) NULL COMMENT '院区/病区名称',
|
-- CHANGE COLUMN sendlimitpbegin deptcode VARCHAR(64) NULL COMMENT '科室编码',
|
-- CHANGE COLUMN sendlimitpend deptname VARCHAR(128) NULL COMMENT '科室名称';
|