code: func (b *builtinStrToDateDurationSig) evalDuration(row chunk.Row) (types.Duration, bool, error) {
  	date, isNull, err := b.args[0].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return types.Duration{}, isNull, err
  	}
  	format, isNull, err := b.args[1].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return types.Duration{}, isNull, err
  	}
  	var t types.Time
  	sc := b.ctx.GetSessionVars().StmtCtx
  	succ := t.StrToDate(sc, date, format)
  	if !succ {
  		return types.Duration{}, true, handleInvalidTimeError(b.ctx, types.ErrIncorrectDatetimeValue.GenWithStackByArgs(t.String()))
  	}
  	if b.ctx.GetSessionVars().SQLMode.HasNoZeroDateMode() && (t.Time.Year() == 0 || t.Time.Month() == 0 || t.Time.Day() == 0) {
  		return types.Duration{}, true, handleInvalidTimeError(b.ctx, types.ErrIncorrectDatetimeValue.GenWithStackByArgs(t.String()))
  	}
  	t.Fsp = b.tp.Decimal
  	dur, err := t.ConvertToDuration()
  	return dur, err != nil, err
  }
docs: // evalDuration
  // TODO: If the NO_ZERO_DATE or NO_ZERO_IN_DATE SQL mode is enabled, zero dates or part of dates are disallowed.
  // In that case, STR_TO_DATE() returns NULL and generates a warning.