替换字符串

时间:2016-01-15 15:23:41

标签: mysql sql

我有一个名为Attendance的表格和名为attendanceStatusCourseID的列。 attendanceStatus列是文本类型,因为我希望能够在任何给定阶段将每个0更改为1。数据填充了0,但我希望将字符串中的最后0更改为1。数据包含18个0,因此它将是我需要更改的第18个字符。

我觉得我已接近这一点,但如果我不亲近,我愿意听取它的全部改变。

UPDATE Attendance
SET attendanceStatus REPLACE = (attendanceStatus, '0', '1')
WHERE CourseID like '2%';

我意识到这段代码会将所有0改为1,我只想改变第18位。

2 个答案:

答案 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%';