-- 测试不同 period 格式的排班数据 -- 1. 检查当前数据库中使用的 period 格式 SELECT '=== 当前使用的 period 格式 ===' as info; SELECT period, COUNT(*) as count, MIN(date) as first_date, MAX(date) as last_date FROM zyt_doctor_roster GROUP BY period ORDER BY period; -- 2. 查看医生ID=4的 period 格式 SELECT '=== 医生ID=4的排班 ===' as info; SELECT id, doctor_id, date, period, status, CASE status WHEN 1 THEN '出诊' WHEN 2 THEN '停诊' WHEN 3 THEN '休息' WHEN 4 THEN '请假' END as status_name FROM zyt_doctor_roster WHERE doctor_id = 4 AND date BETWEEN '2026-03-02' AND '2026-03-08' ORDER BY date, period; -- 3. 如果 period 是字符串格式,验证修复是否生效 SELECT '=== 验证:应该看到 morning 和 afternoon ===' as info; SELECT period, CASE WHEN period = 'morning' OR period = '上午' OR period = 1 THEN '✓ 上午格式正确' WHEN period = 'afternoon' OR period = '下午' OR period = 2 THEN '✓ 下午格式正确' ELSE '✗ 未知格式' END as format_check FROM zyt_doctor_roster WHERE doctor_id = 4 AND date = '2026-03-04' ORDER BY period; -- 4. 添加测试数据(如果需要) SELECT '=== 添加测试数据(取消注释来执行)===' as info; /* -- 清空测试数据 DELETE FROM zyt_doctor_roster WHERE doctor_id = 4 AND date = '2026-03-04'; -- 添加 morning/afternoon 格式的排班 INSERT INTO zyt_doctor_roster ( doctor_id, date, period, status, quota, max_patients, booked_count, remark, create_time, update_time ) VALUES (4, '2026-03-04', 'morning', 1, 20, 20, 0, '上午出诊', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), (4, '2026-03-04', 'afternoon', 1, 20, 20, 0, '下午出诊', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); */ -- 5. 验证添加的数据 SELECT '=== 验证添加的数据 ===' as info; SELECT id, doctor_id, date, period, status, quota, max_patients, remark FROM zyt_doctor_roster WHERE doctor_id = 4 AND date = '2026-03-04'; -- 6. 检查是否有混合格式 SELECT '=== 检查是否有混合格式 ===' as info; SELECT CASE WHEN period IN ('morning', 'afternoon') THEN '字符串格式' WHEN period IN ('上午', '下午') THEN '中文格式' WHEN period IN ('1', '2') THEN '数字字符串格式' WHEN period IN (1, 2) THEN '数字格式' ELSE '未知格式' END as format_type, COUNT(*) as count FROM zyt_doctor_roster GROUP BY format_type; -- 7. 如果需要统一格式(可选) SELECT '=== 格式转换(可选,取消注释来执行)===' as info; /* -- 方案A:转换为数字格式 UPDATE zyt_doctor_roster SET period = 1 WHERE period IN ('morning', '上午'); UPDATE zyt_doctor_roster SET period = 2 WHERE period IN ('afternoon', '下午'); -- 方案B:转换为字符串格式 UPDATE zyt_doctor_roster SET period = 'morning' WHERE period IN (1, '1', '上午'); UPDATE zyt_doctor_roster SET period = 'afternoon' WHERE period IN (2, '2', '下午'); */ -- 8. 最终验证 SELECT '=== 最终验证 ===' as info; SELECT '医生ID=4在2026-03-04应该有2条出诊排班' as expected; SELECT COUNT(*) as total_count, SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) as status_1_count, GROUP_CONCAT(DISTINCT period ORDER BY period) as period_values FROM zyt_doctor_roster WHERE doctor_id = 4 AND date = '2026-03-04';