liusheng
5 天以前 279d50c151d14d04cb6680b10c82bf32b72968cb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
-- ============================================================================
-- 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 '科室名称';