guoyu/log/Sql/fix_answer_format.sql

83 lines
2.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ========================================
-- 修复题目答案格式问题
-- 将包含完整格式的答案(如"B. 选项内容")转换为纯字母(如"B"
-- ========================================
-- 备份数据
CREATE TABLE IF NOT EXISTS question_backup_20251205 AS SELECT * FROM question;
-- 查看需要修复的数据
SELECT
id,
SUBSTRING(question_content, 1, 30) AS ,
correct_answer AS ,
CASE
WHEN correct_answer LIKE '%,%' THEN
-- 多选题:提取字母部分(如 "A. 选项1, B. 选项2" → "A,B"
TRIM(CONCAT_WS(',',
IF(correct_answer LIKE '%A.%', 'A', NULL),
IF(correct_answer LIKE '%B.%', 'B', NULL),
IF(correct_answer LIKE '%C.%', 'C', NULL),
IF(correct_answer LIKE '%D.%', 'D', NULL),
IF(correct_answer LIKE '%E.%', 'E', NULL),
IF(correct_answer LIKE '%F.%', 'F', NULL)
))
WHEN correct_answer LIKE '%.%' THEN
-- 单选题:提取字母部分(如 "B. 选项内容" → "B"
SUBSTRING(correct_answer, 1, 1)
ELSE
correct_answer
END AS
FROM question
WHERE correct_answer LIKE '%. %';
-- 修复数据:将完整格式的答案转换为纯字母
-- 注意此SQL需要手动执行执行前请检查上面的查询结果
-- UPDATE question
-- SET correct_answer = CASE
-- WHEN correct_answer LIKE '%,%' THEN
-- -- 多选题:提取字母部分
-- REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
-- correct_answer,
-- 'A. ', 'A,'),
-- 'B. ', 'B,'),
-- 'C. ', 'C,'),
-- 'D. ', 'D,'),
-- 'E. ', 'E,'),
-- 'F. ', 'F,')
-- WHEN correct_answer LIKE '%. %' THEN
-- -- 单选题:提取字母部分
-- SUBSTRING(correct_answer, 1, 1)
-- ELSE
-- correct_answer
-- END
-- WHERE correct_answer LIKE '%. %';
-- 更简单的修复方法:
UPDATE question
SET correct_answer = SUBSTRING(correct_answer, 1, LOCATE('.', correct_answer) - 1)
WHERE correct_answer LIKE '%. %'
AND correct_answer NOT LIKE '%,%'; -- 只处理单选题
-- 多选题的修复(复杂,需要逐个处理)
-- 示例ID 184 的题目
-- 原答案:"A. 顺丰的高度官方的,B. 多少分多少多少,C. 撒地方收到"
-- 应改为:"A,B,C"
UPDATE question
SET correct_answer = 'A,B,C'
WHERE id = 184;
-- 验证修复结果
SELECT
id,
SUBSTRING(question_content, 1, 30) AS ,
correct_answer AS ,
question_type AS
FROM question
WHERE id IN (37, 164, 166, 184);
-- 注意事项:
-- 1. 执行前请先备份数据库
-- 2. 执行UPDATE前先查看SELECT结果确认无误
-- 3. 如有疑问请手动检查并修复