code: func (b *builtinTimeStringTimeDiffSig) evalDuration(row chunk.Row) (d types.Duration, isNull bool, err error) {
  	lhs, isNull, err := b.args[0].EvalTime(b.ctx, row)
  	if isNull || err != nil {
  		return d, isNull, err
  	}
  
  	rhsStr, isNull, err := b.args[1].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return d, isNull, err
  	}
  
  	sc := b.ctx.GetSessionVars().StmtCtx
  	_, rhs, isDuration, err := convertStringToDuration(sc, rhsStr, b.tp.Decimal)
  	if err != nil || isDuration {
  		return d, true, err
  	}
  
  	d, isNull, err = calculateTimeDiff(sc, lhs, rhs)
  	return d, isNull, err
  }
docs: // evalDuration evals a builtinTimeStringTimeDiffSig.
  // See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timediff