diff --git a/dbms/src/Functions/FunctionsTiDBConversion.h b/dbms/src/Functions/FunctionsTiDBConversion.h index a1a32c9ac54..954cc2e8d49 100644 --- a/dbms/src/Functions/FunctionsTiDBConversion.h +++ b/dbms/src/Functions/FunctionsTiDBConversion.h @@ -1011,9 +1011,9 @@ struct TiDBConvertToDecimal size_t pos = 0; if (decimal_parts.int_part.data[pos] == '+' || decimal_parts.int_part.data[pos] == '-') { - pos++; if (decimal_parts.int_part.data[pos] == '-') is_negative = true; + pos++; } Int256 max_value = DecimalMaxValue::Get(prec); diff --git a/tests/fullstack-test/expr/cast_string_as_decimal.test b/tests/fullstack-test/expr/cast_string_as_decimal.test new file mode 100644 index 00000000000..13d908ee6a5 --- /dev/null +++ b/tests/fullstack-test/expr/cast_string_as_decimal.test @@ -0,0 +1,22 @@ +mysql> drop table if exists test.t +mysql> create table test.t(a char(10)) +mysql> alter table test.t set tiflash replica 1 +mysql> insert into test.t values('-123') +mysql> insert into test.t values('2006-01') + +func> wait_table test t + +mysql> set tidb_enforce_mpp=1; select cast(a as decimal) from test.t; ++--------------------+ +| cast(a as decimal) | ++--------------------+ +| -123 | +| 2006 | ++--------------------+ +mysql> set @@tidb_isolation_read_engines='tikv'; select cast(a as decimal) from test.t; ++--------------------+ +| cast(a as decimal) | ++--------------------+ +| -123 | +| 2006 | ++--------------------+ \ No newline at end of file