This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new 37239d82952 [fix](datetime) fix datetime round on BE (#31205) (#31229) 37239d82952 is described below commit 37239d82952c6cf4125e526070e0ea4262a831df Author: zhiqiang <seuhezhiqi...@163.com> AuthorDate: Wed Feb 21 19:44:52 2024 +0800 [fix](datetime) fix datetime round on BE (#31205) (#31229) with tmp as ( select CONCAT( YEAR('2024-02-06 03:37:07.157'), '-', LPAD(MONTH('2024-02-06 03:37:07.157'), 2, '0'), '-', LPAD(DAY('2024-02-06 03:37:07.157'), 2, '0'), ' ', LPAD(HOUR('2024-02-06 03:37:07.157'), 2, '0'), ':', LPAD(MINUTE('2024-02-06 03:37:07.157'), 2, '0'), ':', LPAD(SECOND('2024-02-06 03:37:07.157'), 2, '0'), '.', "123456789" ) AS generated_string) select generated_string, cast(generated_string as DateTime(6)) from tmp before (incorrect round) +-------------------------------+-----------------------------------------+ | generated_string | cast(generated_string as DATETIMEV2(6)) | +-------------------------------+-----------------------------------------+ | 2024-02-06 03:37:07.123456789 | 2024-02-06 03:37:07.123456 | +-------------------------------+-----------------------------------------+ after (round up, keep consistent with mysql): +-------------------------------+-----------------------------------------+ | generated_string | cast(generated_string as DATETIMEV2(6)) | +-------------------------------+-----------------------------------------+ | 2024-02-06 03:37:07.123456789 | 2024-02-06 03:37:07.123457 | +-------------------------------+-----------------------------------------+ 1 row in set (0.03 sec) same work with #30744 but implemented on BE --- be/src/vec/runtime/vdatetime_value.cpp | 4 +- .../data/datatype_p0/datetimev2/test_round.out | 11 ++++ .../datatype_p0/datetimev2/test_round.groovy | 58 ++++++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/be/src/vec/runtime/vdatetime_value.cpp b/be/src/vec/runtime/vdatetime_value.cpp index 47b77b3d6bf..35abba4d004 100644 --- a/be/src/vec/runtime/vdatetime_value.cpp +++ b/be/src/vec/runtime/vdatetime_value.cpp @@ -2037,8 +2037,8 @@ bool DateV2Value<T>::from_date_str_base(const char* date_str, int len, int scale temp_val *= int_exp10(std::max(0L, 6 - ms_part)); if constexpr (is_datetime) { if (scale >= 0) { - if (scale == 6 && ms_part > 6) { - if (ptr < end && isdigit(*ptr) && *ptr >= '5') { + if (scale == 6 && ms_part >= 6) { + if (ptr <= end && isdigit(*ptr) && *ptr >= '5') { temp_val += 1; } } else { diff --git a/regression-test/data/datatype_p0/datetimev2/test_round.out b/regression-test/data/datatype_p0/datetimev2/test_round.out new file mode 100644 index 00000000000..89ca82457c6 --- /dev/null +++ b/regression-test/data/datatype_p0/datetimev2/test_round.out @@ -0,0 +1,11 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !cast -- +2024-02-06 03:37:07.123456789 2024-02-06T03:37:07.123457 + +-- !cast -- +1 2024-02-01 12:13:14.123456 2024-02-01T12:13:14.123456 +2 2024-02-01 12:13:14.1234567 2024-02-01T12:13:14.123457 +3 2024-02-01 12:13:14.12345671 2024-02-01T12:13:14.123457 +4 2024-02-01 12:13:14.1234561 2024-02-01T12:13:14.123456 +5 2024-02-01 12:13:14.12345615 2024-02-01T12:13:14.123456 + diff --git a/regression-test/suites/datatype_p0/datetimev2/test_round.groovy b/regression-test/suites/datatype_p0/datetimev2/test_round.groovy new file mode 100644 index 00000000000..01aee4d7a06 --- /dev/null +++ b/regression-test/suites/datatype_p0/datetimev2/test_round.groovy @@ -0,0 +1,58 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_time_round") { + qt_cast """ + with tmp as ( + select CONCAT( + YEAR('2024-02-06 03:37:07.157'), '-', + LPAD(MONTH('2024-02-06 03:37:07.157'), 2, '0'), '-', + LPAD(DAY('2024-02-06 03:37:07.157'), 2, '0'), ' ', + LPAD(HOUR('2024-02-06 03:37:07.157'), 2, '0'), ':', + LPAD(MINUTE('2024-02-06 03:37:07.157'), 2, '0'), ':', + LPAD(SECOND('2024-02-06 03:37:07.157'), 2, '0'), '.', "123456789") + AS generated_string) + select generated_string, cast(generated_string as DateTime(6)) from tmp + """ + sql """ + DROP TABLE IF EXISTS test_time_round; + """ + sql """ + CREATE TABLE test_time_round (`rowid` int, str varchar) + ENGINE=OLAP + UNIQUE KEY(`rowid`) + COMMENT "OLAP" + DISTRIBUTED BY HASH(`rowid`) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1", + "colocate_with" = "lineitem_orders", + "enable_unique_key_merge_on_write" = "true" + ); + """ + sql """ + insert into test_time_round values + (1, "2024-02-01 12:13:14.123456"), + (2, "2024-02-01 12:13:14.1234567"), + (3, "2024-02-01 12:13:14.12345671"), + (4, "2024-02-01 12:13:14.1234561"), + (5, "2024-02-01 12:13:14.12345615") + """ + + qt_cast """ + select *, cast (str as Datetime(6)) from test_time_round order by rowid; + """ +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org