This is an automated email from the ASF dual-hosted git repository.
lihaopeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 20b3e5eafe [feature](Datetime) add from_microsecond / from_millisecond
function (#23902)
20b3e5eafe is described below
commit 20b3e5eafe54d6439f74a2150f53986e9298ede3
Author: Mryange <[email protected]>
AuthorDate: Thu Sep 7 19:03:49 2023 +0800
[feature](Datetime) add from_microsecond / from_millisecond function
(#23902)
---
.../function_date_or_datetime_computation.cpp | 6 +
.../function_date_or_datetime_computation.h | 49 ++++++++
be/src/vec/functions/function_timestamp.cpp | 66 +++++++++++
.../date-time-functions/from-unixtime.md | 11 ++
.../date-time-functions/from-second.md | 81 +++++++++++++
.../date-time-functions/from-unixtime.md | 11 ++
.../date-time-functions/second-timestamp.md | 67 +++++++++++
.../apache/doris/analysis/FunctionCallExpr.java | 15 +++
.../doris/catalog/BuiltinScalarFunctions.java | 12 ++
.../functions/scalar/FromMicrosecond.java | 62 ++++++++++
.../functions/scalar/FromMillisecond.java | 62 ++++++++++
.../expressions/functions/scalar/FromSecond.java | 62 ++++++++++
.../functions/scalar/MicroSecondTimestamp.java | 62 ++++++++++
.../functions/scalar/MilliSecondTimestamp.java | 62 ++++++++++
.../functions/scalar/SecondTimestamp.java | 62 ++++++++++
gensrc/script/doris_builtins_functions.py | 6 +
.../test_from_millisecond_microsecond.out | 67 +++++++++++
.../test_from_millisecond_microsecond.groovy | 131 +++++++++++++++++++++
18 files changed, 894 insertions(+)
diff --git a/be/src/vec/functions/function_date_or_datetime_computation.cpp
b/be/src/vec/functions/function_date_or_datetime_computation.cpp
index 9506835c5d..bbeb3df558 100644
--- a/be/src/vec/functions/function_date_or_datetime_computation.cpp
+++ b/be/src/vec/functions/function_date_or_datetime_computation.cpp
@@ -124,6 +124,9 @@ using FunctionCurrentTime =
FunctionCurrentDateOrDateTime<CurrentTimeImpl<Curren
using FunctionUtcTimeStamp = FunctionCurrentDateOrDateTime<UtcTimestampImpl>;
using FunctionTimeToSec = FunctionCurrentDateOrDateTime<TimeToSecImpl>;
using FunctionSecToTime = FunctionCurrentDateOrDateTime<SecToTimeImpl>;
+using FunctionMicroSecToDateTime = TimestampToDateTime<MicroSec>;
+using FunctionMilliSecToDateTime = TimestampToDateTime<MilliSec>;
+using FunctionSecToDateTime = TimestampToDateTime<Sec>;
/// @TEMPORARY: for be_exec_version=2
using FunctionToWeekTwoArgsOld =
@@ -179,6 +182,9 @@ void
register_function_date_time_computation(SimpleFunctionFactory& factory) {
factory.register_function<FunctionUtcTimeStamp>();
factory.register_function<FunctionTimeToSec>();
factory.register_function<FunctionSecToTime>();
+ factory.register_function<FunctionMicroSecToDateTime>();
+ factory.register_function<FunctionMilliSecToDateTime>();
+ factory.register_function<FunctionSecToDateTime>();
// alias
factory.register_alias("days_add", "date_add");
diff --git a/be/src/vec/functions/function_date_or_datetime_computation.h
b/be/src/vec/functions/function_date_or_datetime_computation.h
index ebf9a0cb49..f77848983c 100644
--- a/be/src/vec/functions/function_date_or_datetime_computation.h
+++ b/be/src/vec/functions/function_date_or_datetime_computation.h
@@ -1104,6 +1104,55 @@ struct SecToTimeImpl {
return Status::OK();
}
};
+struct MicroSec {
+ static constexpr auto name = "from_microsecond";
+ static constexpr Int64 ratio = 1000000;
+};
+struct MilliSec {
+ static constexpr auto name = "from_millisecond";
+ static constexpr Int64 ratio = 1000;
+};
+struct Sec {
+ static constexpr auto name = "from_second";
+ static constexpr Int64 ratio = 1;
+};
+template <typename Impl>
+struct TimestampToDateTime : IFunction {
+ using ReturnType = DataTypeDateTimeV2;
+ static constexpr auto name = Impl::name;
+ static constexpr Int64 ratio_to_micro = (1000 * 1000) / Impl::ratio;
+ String get_name() const override { return name; }
+
+ size_t get_number_of_arguments() const override { return 1; }
+
+ DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments)
const override {
+ return make_nullable(std::make_shared<ReturnType>());
+ }
+
+ static FunctionPtr create() { return
std::make_shared<TimestampToDateTime<Impl>>(); }
+
+ Status execute_impl(FunctionContext* context, Block& block, const
ColumnNumbers& arguments,
+ size_t result, size_t input_rows_count) override {
+ const auto& arg_col = block.get_by_position(arguments[0]).column;
+ const auto& column_data = assert_cast<const ColumnInt64&>(*arg_col);
+ auto res_col = ColumnUInt64::create();
+ auto null_vector = ColumnVector<UInt8>::create();
+ res_col->get_data().resize_fill(input_rows_count, 0);
+ null_vector->get_data().resize_fill(input_rows_count, false);
+ NullMap& null_map = null_vector->get_data();
+ auto& res_data = res_col->get_data();
+ const cctz::time_zone& time_zone = context->state()->timezone_obj();
+ for (int i = 0; i < input_rows_count; ++i) {
+ Int64 value = column_data.get_element(i);
+ auto& dt =
reinterpret_cast<DateV2Value<DateTimeV2ValueType>&>(res_data[i]);
+ null_map[i] = !dt.from_unixtime(value / Impl::ratio, time_zone);
+ dt.set_microsecond((value % Impl::ratio) * ratio_to_micro);
+ }
+ block.get_by_position(result).column =
+ ColumnNullable::create(std::move(res_col),
std::move(null_vector));
+ return Status::OK();
+ }
+};
struct UtcTimestampImpl {
using ReturnType = DataTypeDateTime;
diff --git a/be/src/vec/functions/function_timestamp.cpp
b/be/src/vec/functions/function_timestamp.cpp
index 1bca282f2e..3510365f46 100644
--- a/be/src/vec/functions/function_timestamp.cpp
+++ b/be/src/vec/functions/function_timestamp.cpp
@@ -782,6 +782,68 @@ public:
}
};
+struct MicroSec {
+ static constexpr auto name = "microsecond_timestamp";
+ static constexpr Int64 ratio = 1000000;
+};
+struct MilliSec {
+ static constexpr auto name = "millisecond_timestamp";
+ static constexpr Int64 ratio = 1000;
+};
+struct Sec {
+ static constexpr auto name = "second_timestamp";
+ static constexpr Int64 ratio = 1;
+};
+template <typename Impl>
+class DateTimeToTimestamp : public IFunction {
+public:
+ using ReturnType = Int64;
+ static constexpr Int64 ratio_to_micro = (1000 * 1000) / Impl::ratio;
+ static constexpr auto name = Impl::name;
+ static FunctionPtr create() { return
std::make_shared<DateTimeToTimestamp<Impl>>(); }
+
+ String get_name() const override { return name; }
+
+ size_t get_number_of_arguments() const override { return 1; }
+
+ DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments)
const override {
+ return make_nullable(std::make_shared<DataTypeInt64>());
+ }
+
+ Status execute_impl(FunctionContext* context, Block& block, const
ColumnNumbers& arguments,
+ size_t result, size_t input_rows_count) override {
+ const auto& arg_col = block.get_by_position(arguments[0]).column;
+ const auto& column_data = assert_cast<const ColumnUInt64&>(*arg_col);
+ auto res_col = ColumnInt64::create();
+ auto null_vector = ColumnVector<UInt8>::create();
+ res_col->get_data().resize_fill(input_rows_count, 0);
+ null_vector->get_data().resize_fill(input_rows_count, false);
+ NullMap& null_map = null_vector->get_data();
+ auto& res_data = res_col->get_data();
+ const cctz::time_zone& time_zone = context->state()->timezone_obj();
+ for (int i = 0; i < input_rows_count; i++) {
+ if (arg_col->is_null_at(i)) {
+ null_map[i] = true;
+ continue;
+ }
+ StringRef source = column_data.get_data_at(i);
+ const DateV2Value<DateTimeV2ValueType>& dt =
+ reinterpret_cast<const
DateV2Value<DateTimeV2ValueType>&>(*source.data);
+ int64_t timestamp {0};
+ if (!dt.unix_timestamp(×tamp, time_zone)) {
+ null_map[i] = true;
+ } else {
+ auto microsecond = dt.microsecond();
+ timestamp = timestamp * Impl::ratio + microsecond /
ratio_to_micro;
+ res_data[i] = timestamp;
+ }
+ }
+ block.get_by_position(result).column =
+ ColumnNullable::create(std::move(res_col),
std::move(null_vector));
+ return Status::OK();
+ }
+};
+
template <template <typename> class Impl, typename DateType>
class FunctionDateOrDateTimeToDate : public IFunction {
public:
@@ -1235,6 +1297,10 @@ void register_function_timestamp(SimpleFunctionFactory&
factory) {
factory.register_function<FunctionDateOrDateTimeToDate<MondayImpl,
DataTypeDateTimeV2>>();
factory.register_function<FunctionDateOrDateTimeToDate<MondayImpl,
DataTypeDate>>();
factory.register_function<FunctionDateOrDateTimeToDate<MondayImpl,
DataTypeDateTime>>();
+
+ factory.register_function<DateTimeToTimestamp<MicroSec>>();
+ factory.register_function<DateTimeToTimestamp<MilliSec>>();
+ factory.register_function<DateTimeToTimestamp<Sec>>();
}
} // namespace doris::vectorized
diff --git
a/docs/en/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
b/docs/en/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
index 5380a1669c..3e9c8dc623 100644
--- a/docs/en/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
+++ b/docs/en/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
@@ -63,6 +63,17 @@ mysql> select from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s');
+--------------------------------------------------+
```
+For timestamps that exceed the range, you can use the "from_second" function.
+`DATETIME FROM_SECOND(BIGINT unix_timestamp)`
+```
+mysql> select from_second(21474836470);
++--------------------------+
+| from_second(21474836470) |
++--------------------------+
+| 2650-07-06 16:21:10 |
++--------------------------+
+```
+
### keywords
FROM_UNIXTIME,FROM,UNIXTIME
diff --git
a/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-second.md
b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-second.md
new file mode 100644
index 0000000000..601cb4a707
--- /dev/null
+++
b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-second.md
@@ -0,0 +1,81 @@
+---
+{
+ "title": "FROM_SECOND",
+ "language": "zh-CN"
+}
+---
+
+<!--
+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.
+-->
+
+## from_second
+### description
+#### Syntax
+
+`DATETIME FROM_SECOND(BIGINT unix_timestamp)`
+`DATETIME FROM_MILLISECOND(BIGINT unix_timestamp)`
+`DATETIME FROM_MICROSECOND(BIGINT unix_timestamp)`
+
+将时间戳转化为对应的 DATETIME
+
+传入的是整型,返回的是DATETIME类型
+
+
+### example
+
+```
+mysql> select from_microsecond(0);
++----------------------------+
+| from_microsecond(0) |
++----------------------------+
+| 1970-01-01 08:00:00.000000 |
++----------------------------+
+
+mysql> select from_microsecond(12345678);
++----------------------------+
+| from_microsecond(12345678) |
++----------------------------+
+| 1970-01-01 08:00:12.345678 |
++----------------------------+
+
+mysql> select from_millisecond(0);
++-------------------------+
+| from_millisecond(0) |
++-------------------------+
+| 1970-01-01 08:00:00.000 |
++-------------------------+
+
+mysql> select from_millisecond(12345678);
++----------------------------+
+| from_millisecond(12345678) |
++----------------------------+
+| 1970-01-01 11:25:45.678 |
++----------------------------+
+
+mysql> select from_second(21474836470);
++--------------------------+
+| from_second(21474836470) |
++--------------------------+
+| 2650-07-06 16:21:10 |
++--------------------------+
+```
+
+### keywords
+
+ FROM_SECOND
diff --git
a/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
index 3c90b0d385..42aeb89037 100644
---
a/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
+++
b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/from-unixtime.md
@@ -75,6 +75,17 @@ mysql> select from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s');
+--------------------------------------------------+
```
+对于超过范围的时间戳,可以采用from_second函数
+`DATETIME FROM_SECOND(BIGINT unix_timestamp)`
+```
+mysql> select from_second(21474836470);
++--------------------------+
+| from_second(21474836470) |
++--------------------------+
+| 2650-07-06 16:21:10 |
++--------------------------+
+```
+
### keywords
FROM_UNIXTIME,FROM,UNIXTIME
diff --git
a/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/second-timestamp.md
b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/second-timestamp.md
new file mode 100644
index 0000000000..11b4c6c8f3
--- /dev/null
+++
b/docs/zh-CN/docs/sql-manual/sql-functions/date-time-functions/second-timestamp.md
@@ -0,0 +1,67 @@
+---
+{
+ "title": "SECOND_TIMESTAMP",
+ "language": "zh-CN"
+}
+---
+
+<!--
+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.
+-->
+
+## second_timestamp
+### description
+#### Syntax
+
+`BIGINT SECOND_TIMESTAMP(DATETIME date)`
+`BIGINT MILLISECOND_TIMESTAMP(DATETIME date)`
+`BIGINT MICROSECOND_TIMESTAMP(DATETIME date)`
+
+将DATETIME类型转换成对应的时间戳
+
+传入的是DATETIME类型,返回的是整型
+
+
+### example
+
+```
+mysql> select
from_millisecond(89417891234789),millisecond_timestamp(from_millisecond(89417891234789));
++----------------------------------+---------------------------------------------------------+
+| from_millisecond(89417891234789) |
millisecond_timestamp(from_millisecond(89417891234789)) |
++----------------------------------+---------------------------------------------------------+
+| 4803-07-17 15:07:14.789 |
89417891234789 |
++----------------------------------+---------------------------------------------------------+
+
+mysql> select
from_second(89417891234),second_timestamp(from_second(89417891234));
++--------------------------+--------------------------------------------+
+| from_second(89417891234) | second_timestamp(from_second(89417891234)) |
++--------------------------+--------------------------------------------+
+| 4803-07-17 15:07:14 | 89417891234 |
++--------------------------+--------------------------------------------+
+
+mysql> select
from_microsecond(89417891234),microsecond_timestamp(from_microsecond(89417891234));
++-------------------------------+------------------------------------------------------+
+| from_microsecond(89417891234) |
microsecond_timestamp(from_microsecond(89417891234)) |
++-------------------------------+------------------------------------------------------+
+| 1970-01-02 08:50:17.891234 |
89417891234 |
++-------------------------------+------------------------------------------------------+
+```
+
+### keywords
+
+ SECOND_TIMESTAMP
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index 855f2036d8..6217eef61c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -1639,6 +1639,21 @@ public class FunctionCallExpr extends Expr {
}
}
+ if (fn.getFunctionName().getFunction().equals("from_microsecond")) {
+ Type ret = ScalarType.createDatetimeV2Type(6);
+ fn.setReturnType(ret);
+ }
+
+ if (fn.getFunctionName().getFunction().equals("from_millisecond")) {
+ Type ret = ScalarType.createDatetimeV2Type(3);
+ fn.setReturnType(ret);
+ }
+
+ if (fn.getFunctionName().getFunction().equals("from_second")) {
+ Type ret = ScalarType.createDatetimeV2Type(0);
+ fn.setReturnType(ret);
+ }
+
if (fnName.getFunction().equalsIgnoreCase("map")) {
if ((children.size() & 1) == 1) {
throw new AnalysisException("map can't be odd parameters, need
even parameters: "
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
index 6d3fa49f46..6b12d248ed 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
@@ -143,6 +143,9 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.Fmod;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Fpow;
import org.apache.doris.nereids.trees.expressions.functions.scalar.FromBase64;
import org.apache.doris.nereids.trees.expressions.functions.scalar.FromDays;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.FromMicrosecond;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.FromMillisecond;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.FromSecond;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.FromUnixtime;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.GetJsonBigInt;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.GetJsonDouble;
@@ -212,7 +215,9 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.MaskFirstN;
import org.apache.doris.nereids.trees.expressions.functions.scalar.MaskLastN;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Md5;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Md5Sum;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.MicroSecondTimestamp;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Microsecond;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.MilliSecondTimestamp;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Minute;
import org.apache.doris.nereids.trees.expressions.functions.scalar.MinuteCeil;
import org.apache.doris.nereids.trees.expressions.functions.scalar.MinuteFloor;
@@ -267,6 +272,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.SecToTime;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Second;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondCeil;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondFloor;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.SecondTimestamp;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsAdd;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsDiff;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsSub;
@@ -620,6 +626,12 @@ public class BuiltinScalarFunctions implements
FunctionHelper {
scalar(SecondsDiff.class, "seconds_diff"),
scalar(SecondsSub.class, "seconds_sub"),
scalar(SecToTime.class, "sec_to_time"),
+ scalar(FromMicrosecond.class, "from_microsecond"),
+ scalar(FromMillisecond.class, "from_millisecond"),
+ scalar(FromSecond.class, "from_second"),
+ scalar(SecondTimestamp.class, "second_timestamp"),
+ scalar(MilliSecondTimestamp.class, "millisecond_timestamp"),
+ scalar(MicroSecondTimestamp.class, "microsecond_timestamp"),
scalar(Sign.class, "sign"),
scalar(Sin.class, "sin"),
scalar(Sleep.class, "sleep"),
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromMicrosecond.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromMicrosecond.java
new file mode 100644
index 0000000000..32e38858da
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromMicrosecond.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'from_microsecond'.
+ */
+public class FromMicrosecond extends ScalarFunction
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+
+ private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(DateTimeV2Type.MAX).args(BigIntType.INSTANCE));
+
+ public FromMicrosecond(Expression arg0) {
+ super("from_microsecond", arg0);
+ }
+
+ @Override
+ public FromMicrosecond withChildren(List<Expression> children) {
+ Preconditions.checkArgument(children.size() == 1);
+ return new FromMicrosecond(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitScalarFunction(this, context);
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromMillisecond.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromMillisecond.java
new file mode 100644
index 0000000000..658f7444d8
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromMillisecond.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'from_millisecond'.
+ */
+public class FromMillisecond extends ScalarFunction
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+ public static final DateTimeV2Type MillisecondDateTimeV2 =
DateTimeV2Type.of(3);
+ private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(MillisecondDateTimeV2).args(BigIntType.INSTANCE));
+
+ public FromMillisecond(Expression arg0) {
+ super("from_millisecond", arg0);
+ }
+
+ @Override
+ public FromMillisecond withChildren(List<Expression> children) {
+ Preconditions.checkArgument(children.size() == 1);
+ return new FromMillisecond(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitScalarFunction(this, context);
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromSecond.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromSecond.java
new file mode 100644
index 0000000000..46c550fe78
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/FromSecond.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'from_second'.
+ */
+public class FromSecond extends ScalarFunction
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+
+ private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT).args(BigIntType.INSTANCE));
+
+ public FromSecond(Expression arg0) {
+ super("from_second", arg0);
+ }
+
+ @Override
+ public FromSecond withChildren(List<Expression> children) {
+ Preconditions.checkArgument(children.size() == 1);
+ return new FromSecond(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitScalarFunction(this, context);
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondTimestamp.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondTimestamp.java
new file mode 100644
index 0000000000..48006ec481
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MicroSecondTimestamp.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'microsecond_timestamp'.
+ */
+public class MicroSecondTimestamp extends ScalarFunction
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+
+ private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(BigIntType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT));
+
+ public MicroSecondTimestamp(Expression arg0) {
+ super("microsecond_timestamp", arg0);
+ }
+
+ @Override
+ public MicroSecondTimestamp withChildren(List<Expression> children) {
+ Preconditions.checkArgument(children.size() == 1);
+ return new MicroSecondTimestamp(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitScalarFunction(this, context);
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondTimestamp.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondTimestamp.java
new file mode 100644
index 0000000000..16754c5331
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/MilliSecondTimestamp.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'millisecond_timestamp'.
+ */
+public class MilliSecondTimestamp extends ScalarFunction
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+
+ private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(BigIntType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT));
+
+ public MilliSecondTimestamp(Expression arg0) {
+ super("millisecond_timestamp", arg0);
+ }
+
+ @Override
+ public MilliSecondTimestamp withChildren(List<Expression> children) {
+ Preconditions.checkArgument(children.size() == 1);
+ return new MilliSecondTimestamp(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitScalarFunction(this, context);
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondTimestamp.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondTimestamp.java
new file mode 100644
index 0000000000..fdb76506d1
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SecondTimestamp.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullableOnDateLikeV2Args;
+import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'second_timestamp'.
+ */
+public class SecondTimestamp extends ScalarFunction
+ implements BinaryExpression, ExplicitlyCastableSignature,
PropagateNullableOnDateLikeV2Args {
+
+ private static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(BigIntType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT));
+
+ public SecondTimestamp(Expression arg0) {
+ super("second_timestamp", arg0);
+ }
+
+ @Override
+ public SecondTimestamp withChildren(List<Expression> children) {
+ Preconditions.checkArgument(children.size() == 1);
+ return new SecondTimestamp(children.get(0));
+ }
+
+ @Override
+ public List<FunctionSignature> getSignatures() {
+ return SIGNATURES;
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitScalarFunction(this, context);
+ }
+}
diff --git a/gensrc/script/doris_builtins_functions.py
b/gensrc/script/doris_builtins_functions.py
index 0dd79c2df6..dae4a1c15b 100644
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -872,6 +872,12 @@ visible_functions = {
[['from_unixtime'], 'VARCHAR', ['INT'], 'ALWAYS_NULLABLE'],
[['from_unixtime'], 'VARCHAR', ['INT', 'VARCHAR'], 'ALWAYS_NULLABLE'],
[['from_unixtime'], 'VARCHAR', ['INT', 'STRING'], 'ALWAYS_NULLABLE'],
+ [['from_microsecond'], 'DATETIMEV2', ['BIGINT'], 'ALWAYS_NULLABLE'],
+ [['from_millisecond'], 'DATETIMEV2', ['BIGINT'], 'ALWAYS_NULLABLE'],
+ [['from_second'], 'DATETIMEV2', ['BIGINT'], 'ALWAYS_NULLABLE'],
+ [['second_timestamp'], 'BIGINT', ['DATETIMEV2'], 'ALWAYS_NULLABLE'],
+ [['millisecond_timestamp'], 'BIGINT', ['DATETIMEV2'],
'ALWAYS_NULLABLE'],
+ [['microsecond_timestamp'], 'BIGINT', ['DATETIMEV2'],
'ALWAYS_NULLABLE'],
[['now', 'current_timestamp', 'localtime', 'localtimestamp'],
'DATETIME', [], 'DEPEND_ON_ARGUMENT'],
[['now', 'current_timestamp', 'localtime', 'localtimestamp'],
'DATETIMEV2', ['INT'], 'DEPEND_ON_ARGUMENT'],
[['curtime', 'current_time'], 'TIME', [], 'ALWAYS_NOT_NULLABLE'],
diff --git
a/regression-test/data/correctness/test_from_millisecond_microsecond.out
b/regression-test/data/correctness/test_from_millisecond_microsecond.out
new file mode 100644
index 0000000000..50861a9400
--- /dev/null
+++ b/regression-test/data/correctness/test_from_millisecond_microsecond.out
@@ -0,0 +1,67 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !select1 --
+2030-11-02T08:35:14.514 2030-11-02T08:35:14.514
+4803-07-17T15:07:14.789 \N
+2009-02-28T18:44:56.941 2009-02-28T18:44:56.941
+\N \N
+
+-- !select2 --
+1970-01-23T13:16:50.114514 1970-01-23T13:16:50.114514
+1972-11-01T06:18:11.234789 1972-11-01T06:18:11.234789
+1970-01-15T15:16:57.896941 1970-01-15T15:16:57.896941
+\N \N
+
+-- !select3 --
+2038-01-19 11:14:07 2038-01-19T11:14:07 \N 2038-01-19T11:14:08
\N 2650-07-06T16:21:10
+
+-- !select4 --
+1919810114514 1919810114514
+89417891234789 488885820389
+1235817896941 1235817896941
+\N \N \N
+
+-- !select5 --
+1919810114514 2030-11-02T08:35:14.514 1919810114514
+89417891234789 4803-07-17T15:07:14.789 89417891234789
+1235817896941 2009-02-28T18:44:56.941 1235817896941
+\N \N \N
+
+-- !select6 --
+1919810114514 1970-01-23T13:16:50.114514 1919810114514
+89417891234789 1972-11-01T06:18:11.234789 89417891234789
+1235817896941 1970-01-15T15:16:57.896941 1235817896941
+\N \N \N
+
+-- !select7 --
+2030-11-02T08:35:14.514
+4803-07-17T15:07:14.789
+2009-02-28T18:44:56.941
+\N
+
+-- !select8 --
+1970-01-23T13:16:50.114514
+1972-11-01T06:18:11.234789
+1970-01-15T15:16:57.896941
+\N
+
+-- !select9 --
+2038-01-19 11:14:07 2038-01-19T11:14:07 \N 2038-01-19T11:14:08
\N 2650-07-06T16:21:10
+
+-- !select10 --
+1919810114514 1919810114514
+89417891234789 488885820389
+1235817896941 1235817896941
+\N \N \N
+
+-- !select11 --
+1919810114514 2030-11-02T08:35:14.514 1919810114514
+89417891234789 4803-07-17T15:07:14.789 89417891234789
+1235817896941 2009-02-28T18:44:56.941 1235817896941
+\N \N \N
+
+-- !select12 --
+1919810114514 1970-01-23T13:16:50.114514 1919810114514
+89417891234789 1972-11-01T06:18:11.234789 89417891234789
+1235817896941 1970-01-15T15:16:57.896941 1235817896941
+\N \N \N
+
diff --git
a/regression-test/suites/correctness/test_from_millisecond_microsecond.groovy
b/regression-test/suites/correctness/test_from_millisecond_microsecond.groovy
new file mode 100644
index 0000000000..15335cfd68
--- /dev/null
+++
b/regression-test/suites/correctness/test_from_millisecond_microsecond.groovy
@@ -0,0 +1,131 @@
+// 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_from_millisecond_microsecond") {
+ sql """ DROP TABLE IF EXISTS millimicro """
+ sql """
+ CREATE TABLE IF NOT EXISTS millimicro (
+ `id` INT(11) NULL COMMENT "" ,
+ `t` BigINT NULL COMMENT ""
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1",
+ "storage_format" = "V2"
+ );
+ """
+
+ sql """
+ insert into millimicro values(1,1919810114514);
+ """
+ sql """
+ insert into millimicro values(2,89417891234789);
+ """
+ sql """
+ insert into millimicro values(3,1235817896941);
+ """
+
+ sql """
+ insert into millimicro values(4,NULL);
+ """
+ sql """
+ set enable_nereids_planner=false
+ """
+
+ qt_select1 """
+ select
+ from_millisecond(t) as t1 ,
+ microseconds_add(cast(from_unixtime(t/1000) as datetime(3)), cast((t %
1000) * 1000 as int)) as t2
+ from millimicro order by id;
+ """
+
+ qt_select2 """
+ select
+ from_microsecond(t) as t1 ,
+ microseconds_add(cast(from_unixtime(t/1000000) as datetime(6)),
cast((t % 1000000) as int)) as t2
+ from millimicro order by id;
+ """
+
+ qt_select3 """
+ select
+ FROM_UNIXTIME(2147483647),from_second(2147483647),
+ FROM_UNIXTIME(2147483647 + 1),from_second(2147483647 + 1),
+ FROM_UNIXTIME(21474836470),from_second(21474836470);
+ """
+
+ qt_select4 """
+ select
+ t,
+ from_second(t),
+ second_timestamp(from_second(t))
+ from millimicro order by id;
+ """
+ qt_select5 """
+ select
+ t,
+ from_millisecond(t),
+ millisecond_timestamp(from_millisecond(t))
+ from millimicro order by id;
+ """
+ qt_select6 """
+ select
+ t,
+ from_microsecond(t),
+ microsecond_timestamp(from_microsecond(t))
+ from millimicro order by id;
+ """
+ sql """
+ set enable_nereids_planner=true,enable_fold_constant_by_be =
false,forbid_unknown_col_stats = false
+ """
+
+ qt_select7 """
+ select from_millisecond(t) as t1 from millimicro order by id;
+ """
+ qt_select8 """
+ select from_microsecond(t) as t1 from millimicro order by id;
+ """
+
+ qt_select9 """
+ select
+ FROM_UNIXTIME(2147483647),from_second(2147483647),
+ FROM_UNIXTIME(2147483647 + 1),from_second(2147483647 + 1),
+ FROM_UNIXTIME(21474836470),from_second(21474836470);
+ """
+
+ qt_select10 """
+ select
+ t,
+ from_second(t),
+ second_timestamp(from_second(t))
+ from millimicro order by id;
+ """
+ qt_select11 """
+ select
+ t,
+ from_millisecond(t),
+ millisecond_timestamp(from_millisecond(t))
+ from millimicro order by id;
+ """
+ qt_select12 """
+ select
+ t,
+ from_microsecond(t),
+ microsecond_timestamp(from_microsecond(t))
+ from millimicro order by id;
+ """
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]