code: func builtinInterval(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
  	if args[0].IsNull() {
  		d.SetInt64(int64(-1))
  		return
  	}
  	sc := ctx.GetSessionVars().StmtCtx
  
  	idx := sort.Search(len(args)-1, func(i int) bool {
  		d1, d2 := args[0], args[i+1]
  		if d1.Kind() == types.KindInt64 && d1.Kind() == d2.Kind() {
  			return d1.GetInt64() < d2.GetInt64()
  		}
  		if d1.Kind() == types.KindUint64 && d1.Kind() == d2.Kind() {
  			return d1.GetUint64() < d2.GetUint64()
  		}
  		if d1.Kind() == types.KindInt64 && d2.Kind() == types.KindUint64 {
  			return d1.GetInt64() < 0 || d1.GetUint64() < d2.GetUint64()
  		}
  		if d1.Kind() == types.KindUint64 && d2.Kind() == types.KindInt64 {
  			return d2.GetInt64() > 0 && d1.GetUint64() < d2.GetUint64()
  		}
  		v1, _ := d1.ToFloat64(sc)
  		v2, _ := d2.ToFloat64(sc)
  		return v1 < v2
  	})
  	d.SetInt64(int64(idx))
  
  	return
  }
docs: // See http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_interval