code: func (t *Time) Sub(sc *stmtctx.StatementContext, t1 *Time) Duration {
  	var duration gotime.Duration
  	if t.Type == mysql.TypeTimestamp && t1.Type == mysql.TypeTimestamp {
  		a, err := t.Time.GoTime(sc.TimeZone)
  		terror.Log(errors.Trace(err))
  		b, err := t1.Time.GoTime(sc.TimeZone)
  		terror.Log(errors.Trace(err))
  		duration = a.Sub(b)
  	} else {
  		seconds, microseconds, neg := calcTimeDiff(t.Time, t1.Time, 1)
  		duration = gotime.Duration(seconds*1e9 + microseconds*1e3)
  		if neg {
  			duration = -duration
  		}
  	}
  
  	fsp := t.Fsp
  	if fsp < t1.Fsp {
  		fsp = t1.Fsp
  	}
  	return Duration{
  		Duration: duration,
  		Fsp:      fsp,
  	}
  }
docs: // Sub subtracts t1 from t, returns a duration value.
  // Note that sub should not be done on different time types.