programing

MariaDB 트리거 시간 차이를 총 시간의 소수점과 시간의 10분의 1로 계산 항상 반올림

codeshow 2023. 8. 15. 11:49
반응형

MariaDB 트리거 시간 차이를 총 시간의 소수점과 시간의 10분의 1로 계산 항상 반올림

다음 열이 포함된 테이블이 있습니다.

start_time datetime
end_time datetime
billable_time decimal(3,1)

billable_time열은 삽입 시 트리거로 계산되고 업데이트 시 총 시간 수는 10진수로 계산되지만, 가장 가까운 숫자로 반올림하는 대신 항상 10진수로 반올림합니다.트리거를 만들 때 항상 소수점을 반올림하도록 만드는 방법을 알 수 없습니다.이 트리거는 정확하게 계산하지만 가장 가까운 숫자인 경우 반올림합니다.

SET new.billable_time = CAST(TIME_TO_SEC(TIMEDIFF(new.end_time, new.start_time))/3600 as decimal(3,1))

예:

start time = 2020-06-01 11:00:00
end_time = 2020-06-01 12:22:08

결과:

billable_time = 1.4

하지만 항상 반올림하면 1.5가 되어야 합니다.

사용해 보았습니다.CEIL()그리고.CEILING()함수이지만 가장 가까운 정수인 2로 반올림합니다.

어떻게 하면 제가 원하는 대로 할 수 있을지 모르겠습니다.이것을 트리거로 실행할 수 있습니까?어떤 도움이라도 주시면 대단히 감사하겠습니다.데이터베이스는 MariaDB v10.4.13입니다.

잘 부탁드립니다.

간단한 해결책은 0.5초 전의 값에 0.5초를 추가하는 것입니다.casting it:

SET new.billable_time = CAST(
    TIME_TO_SEC(TIMEDIFF(new.end_time, new.start_time))/3600 + 0.05 
    AS decimal(3,1)
)

사용할 수도 있습니다.ceil()그 생각은 우선 다음과 같이 나누는 것입니다.360대신에3600그 다음에 와 함께.ceil()그리고 마지막으로 나눈 값은10:

SET new.billable_time = 
    CEIL(TIME_TO_SEC(TIMEDIFF(new.end_time, new.start_time))/360) / 10 

언급URL : https://stackoverflow.com/questions/62141987/mariadb-trigger-calculating-time-difference-as-a-decimal-of-total-hours-and-tent

반응형