我有一个名为Attendance
的表格和名为attendanceStatus
和CourseID
的列。 attendanceStatus
列是文本类型,因为我希望能够在任何给定阶段将每个0
更改为1
。数据填充了0
,但我希望将字符串中的最后0
更改为1
。数据包含18个0
,因此它将是我需要更改的第18个字符。
我觉得我已接近这一点,但如果我不亲近,我愿意听取它的全部改变。
UPDATE Attendance
SET attendanceStatus REPLACE = (attendanceStatus, '0', '1')
WHERE CourseID like '2%';
我意识到这段代码会将所有0改为1,我只想改变第18位。
答案 0 :(得分:8)
您正在使用错误的方法存储出勤状态。虽然我可以理解为什么你会把它们存放在一个字符串中,但它真的很麻烦。你怎么回答:有多少学生参加了至少10天?第6天有多少学生?有多少学生连续三天缺席?
正确的方法是每个“日”都有一个单独的行(我不确定正确的单位是什么)。它会是这样的:
create table StudentAttendance (
StudentAttendanceId int not null primary key auto_increment,
StudentId int not null references Student(StudentId),
CourseId int not null references Courses(CourseId),
Date date,
status char(1),
constraint unq_scd unique (StudentId, CourseId, Date)
);
答案 1 :(得分:0)
UPDATE Attendance
SET attendanceStatus = CONCAT( SUBSTRING(attendanceStatus,
1,
CHAR_LENGTH (attendanceStatus) - 1
),
'1' )
WHERE CourseID like '2%';