code: func (b *builtinSecToTimeSig) evalDuration(row chunk.Row) (types.Duration, bool, error) {
  	secondsFloat, isNull, err := b.args[0].EvalReal(b.ctx, row)
  	if isNull || err != nil {
  		return types.Duration{}, isNull, err
  	}
  	var (
  		hour          int64
  		minute        int64
  		second        int64
  		demical       float64
  		secondDemical float64
  		negative      string
  	)
  
  	if secondsFloat < 0 {
  		negative = "-"
  		secondsFloat = math.Abs(secondsFloat)
  	}
  	seconds := int64(secondsFloat)
  	demical = secondsFloat - float64(seconds)
  
  	hour = seconds / 3600
  	if hour > 838 {
  		hour = 838
  		minute = 59
  		second = 59
  	} else {
  		minute = seconds % 3600 / 60
  		second = seconds % 60
  	}
  	secondDemical = float64(second) + demical
  
  	var dur types.Duration
  	dur, err = types.ParseDuration(b.ctx.GetSessionVars().StmtCtx, fmt.Sprintf("%s%02d:%02d:%v", negative, hour, minute, secondDemical), b.tp.Decimal)
  	if err != nil {
  		return types.Duration{}, err != nil, err
  	}
  	return dur, false, nil
  }
docs: // evalDuration evals SEC_TO_TIME(seconds).
  // See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_sec-to-time