This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new bd2b3545dc3 branch-4.0: [Fix](tz) Fix some issues about timezone
#61151 (#61264)
bd2b3545dc3 is described below
commit bd2b3545dc3dd7e2e7a69737d157cdc1d8a7bf24
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Mar 13 11:03:14 2026 +0800
branch-4.0: [Fix](tz) Fix some issues about timezone #61151 (#61264)
Cherry-picked from #61151
Co-authored-by: linrrarity <[email protected]>
---
be/src/util/timezone_utils.cpp | 11 +-
.../vec/functions/function_datetime_floor_ceil.cpp | 6 +-
be/test/util/timezone_utils_test.cpp | 2 +-
.../expressions/functions/scalar/HourCeil.java | 11 +-
.../expressions/functions/scalar/HourFloor.java | 11 +-
.../sql-functions/doc_date_functions_test.groovy | 142 +++++++++------------
6 files changed, 96 insertions(+), 87 deletions(-)
diff --git a/be/src/util/timezone_utils.cpp b/be/src/util/timezone_utils.cpp
index d7d8c8f4aeb..45bd02fa1cd 100644
--- a/be/src/util/timezone_utils.cpp
+++ b/be/src/util/timezone_utils.cpp
@@ -126,10 +126,12 @@ static std::string to_hour_string(int arg) {
}
void TimezoneUtils::load_offsets_to_cache() {
+ static constexpr int supported_minutes[] = {0, 30, 45};
for (int hour = -12; hour <= +14; hour++) {
- for (int minute = 0; minute <= 30; minute += 30) {
- std::string offset_str = (hour >= 0 ? "+" : "") +
to_hour_string(hour) + ':' +
- (minute == 0 ? "00" : "30");
+ for (int minute : supported_minutes) {
+ char min_str[3];
+ snprintf(min_str, sizeof(min_str), "%02d", minute);
+ std::string offset_str = (hour >= 0 ? "+" : "") +
to_hour_string(hour) + ':' + min_str;
cctz::time_zone result;
parse_tz_offset_string(offset_str, result);
lower_zone_cache_->emplace(offset_str, result);
@@ -143,6 +145,9 @@ void TimezoneUtils::load_offsets_to_cache() {
offset_str = "-00:30";
parse_tz_offset_string(offset_str, result);
lower_zone_cache_->emplace(offset_str, result);
+ offset_str = "-00:45";
+ parse_tz_offset_string(offset_str, result);
+ lower_zone_cache_->emplace(offset_str, result);
}
bool TimezoneUtils::find_cctz_time_zone(const std::string& timezone,
cctz::time_zone& ctz) {
diff --git a/be/src/vec/functions/function_datetime_floor_ceil.cpp
b/be/src/vec/functions/function_datetime_floor_ceil.cpp
index 2a2ac5e6dd9..853380c4005 100644
--- a/be/src/vec/functions/function_datetime_floor_ceil.cpp
+++ b/be/src/vec/functions/function_datetime_floor_ceil.cpp
@@ -524,7 +524,8 @@ private:
constexpr bool need_tz_conversion =
std::is_same_v<DateValueType, TimestampTzValue> &&
(Flag::Unit == YEAR || Flag::Unit == QUARTER || Flag::Unit ==
MONTH ||
- Flag::Unit == WEEK || Flag::Unit == DAY);
+ Flag::Unit == WEEK || Flag::Unit == DAY || Flag::Unit == HOUR
||
+ Flag::Unit == MINUTE);
DateValueType local_arg;
DateValueType local_origin;
@@ -764,7 +765,8 @@ private:
// For TimestampTzValue on date-based units, disable optimization to
ensure timezone conversion
if constexpr (std::is_same_v<DateValueType, TimestampTzValue>) {
if constexpr (Flag::Unit == YEAR || Flag::Unit == QUARTER ||
Flag::Unit == MONTH ||
- Flag::Unit == WEEK || Flag::Unit == DAY) {
+ Flag::Unit == WEEK || Flag::Unit == DAY ||
Flag::Unit == HOUR ||
+ Flag::Unit == MINUTE) {
return false;
}
}
diff --git a/be/test/util/timezone_utils_test.cpp
b/be/test/util/timezone_utils_test.cpp
index 9130e0be633..06ad0b37048 100644
--- a/be/test/util/timezone_utils_test.cpp
+++ b/be/test/util/timezone_utils_test.cpp
@@ -87,7 +87,7 @@ TEST(TimezoneUtilsTest, ParseOffset) {
TEST(TimezoneUtilsTest, LoadOffsets) {
TimezoneUtils::clear_timezone_caches();
TimezoneUtils::load_offsets_to_cache();
- EXPECT_EQ(TimezoneUtils::cache_size(), (13 + 15) * 2);
+ EXPECT_EQ(TimezoneUtils::cache_size(), (13 + 15) * 3);
TimezoneUtils::load_timezones_to_cache();
EXPECT_GE(TimezoneUtils::cache_size(), 100);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
index 1e4152ddad6..86d6cc0fc41 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourCeil.java
@@ -26,6 +26,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DateTimeV2Type;
import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.types.TimeStampTzType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -45,7 +46,15 @@ public class HourCeil extends ScalarFunction
FunctionSignature.ret(DateTimeV2Type.WILDCARD)
.args(DateTimeV2Type.WILDCARD, IntegerType.INSTANCE),
FunctionSignature.ret(DateTimeV2Type.WILDCARD)
- .args(DateTimeV2Type.WILDCARD, IntegerType.INSTANCE,
DateTimeV2Type.WILDCARD)
+ .args(DateTimeV2Type.WILDCARD, IntegerType.INSTANCE,
DateTimeV2Type.WILDCARD),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD, TimeStampTzType.WILDCARD),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD, IntegerType.INSTANCE),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD, IntegerType.INSTANCE,
TimeStampTzType.WILDCARD)
);
/**
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
index 23515a2b071..e27c9aaa409 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HourFloor.java
@@ -26,6 +26,7 @@ import
org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DateTimeV2Type;
import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.types.TimeStampTzType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -45,7 +46,15 @@ public class HourFloor extends ScalarFunction
FunctionSignature.ret(DateTimeV2Type.WILDCARD)
.args(DateTimeV2Type.WILDCARD, IntegerType.INSTANCE),
FunctionSignature.ret(DateTimeV2Type.WILDCARD)
- .args(DateTimeV2Type.WILDCARD, IntegerType.INSTANCE,
DateTimeV2Type.WILDCARD)
+ .args(DateTimeV2Type.WILDCARD, IntegerType.INSTANCE,
DateTimeV2Type.WILDCARD),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD, TimeStampTzType.WILDCARD),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD, IntegerType.INSTANCE),
+ FunctionSignature.ret(TimeStampTzType.WILDCARD)
+ .args(TimeStampTzType.WILDCARD, IntegerType.INSTANCE,
TimeStampTzType.WILDCARD)
);
/**
diff --git
a/regression-test/suites/doc/sql-manual/sql-functions/doc_date_functions_test.groovy
b/regression-test/suites/doc/sql-manual/sql-functions/doc_date_functions_test.groovy
index 4b41c9ed1ac..9828dfbd33e 100644
---
a/regression-test/suites/doc/sql-manual/sql-functions/doc_date_functions_test.groovy
+++
b/regression-test/suites/doc/sql-manual/sql-functions/doc_date_functions_test.groovy
@@ -57,8 +57,7 @@ suite("doc_date_functions_test") {
def matcher = sqlWithTz =~ /(\w+)\s*\((.*)\)/
if (!matcher) {
- logger.error("Failed to parse SQL: ${sqlWithTz}")
- return false
+ assertTrue(false, "Failed to parse SQL: ${sqlWithTz}")
}
def funcName = matcher[0][1]
@@ -78,7 +77,7 @@ suite("doc_date_functions_test") {
def tzMatcher = param =~ /'([^']+)'/
if (tzMatcher) {
def tzValue = tzMatcher[0][1]
- def convertedResult = sql("SELECT
CAST(CAST('${tzValue}' AS DATETIME) AS STRING)")[0][0]
+ def convertedResult = sql("SELECT
CAST(CAST('${tzValue}' AS DATETIME(6)) AS STRING)")[0][0]
return "'${convertedResult}'"
}
}
@@ -97,26 +96,18 @@ suite("doc_date_functions_test") {
if (allTimestamptz) {
// Case 1: All time parameters are timestamptz
// Validate: resTz (without timezone) should equal resDttm
- if (!resTzStr.replaceAll(/[+-]\d{2}:\d{2}$/,
'').trim().equals(resDttmStr)) {
- logger.error("Validation failed for all-timestamptz:
${sqlWithTz}")
- logger.error("Expected (datetime): ${resDttmStr}")
- logger.error("Got (timestamptz): ${resTzStr}")
- return false
- }
+ def normalizedTz = resTzStr.replaceAll(/[+-]\d{2}:\d{2}$/,
'').trim().replaceAll(/(\.\d*[1-9])0+$/, '$1').replaceAll(/\.0+$/, '')
+ def normalizedDttm = resDttmStr.replaceAll(/(\.\d*[1-9])0+$/,
'$1').replaceAll(/\.0+$/, '')
+ assertTrue(normalizedTz.equals(normalizedDttm),
+ "Validation failed for all-timestamptz: ${sqlWithTz},
Expected (datetime): ${normalizedDttm}, Got (timestamptz): ${normalizedTz}")
logger.info("All timestamptz validation passed:
resTz=${resTzStr}, resDttm=${resDttmStr}")
} else {
// Case 2: Mixed types (some timestamptz, some datetime)
// Validate: resTz should equal resDttm directly
- if (!resTzStr.equals(resDttmStr)) {
- logger.error("Validation failed for mixed-types:
${sqlWithTz}")
- logger.error("Expected: ${resDttmStr}")
- logger.error("Got: ${resTzStr}")
- return false
- }
+ assertTrue(resTzStr.equals(resDttmStr),
+ "Validation failed for mixed-types: ${sqlWithTz},
Time-Zone: ${timeZone}, Expected: ${resDttmStr}, Got: ${resTzStr}")
logger.info("Mixed types validation passed: resTz=${resTzStr},
resDttm=${resDttmStr}")
}
-
- return true
} finally {
if (originalTimeZone != null) {
sql "set time_zone = '${originalTimeZone}'"
@@ -142,8 +133,7 @@ suite("doc_date_functions_test") {
// Extract function name and parameters
def matcher = sqlWithTz =~ /(\w+)\s*\((.*)\)/
if (!matcher) {
- logger.error("Failed to parse SQL: ${sqlWithTz}")
- return false
+ assertTrue(false, "Failed to parse SQL: ${sqlWithTz}")
}
def funcName = matcher[0][1]
@@ -151,8 +141,7 @@ suite("doc_date_functions_test") {
// Check if first parameter exists and is timestamptz
if (params.size() < 1) {
- logger.error("No parameters found in: ${sqlWithTz}")
- return false
+ assertTrue(false, "No parameters found in: ${sqlWithTz}")
}
def firstParam = params[0]
@@ -160,18 +149,17 @@ suite("doc_date_functions_test") {
if (!isTimestamptz) {
logger.info("First parameter is not timestamptz, skipping
validation: ${sqlWithTz}")
- return true
+ return
}
// Convert first parameter to datetime in current timezone
def tzMatcher = firstParam =~ /'([^']+)'/
if (!tzMatcher) {
- logger.error("Failed to extract timestamptz value from:
${firstParam}")
- return false
+ assertTrue(false, "Failed to extract timestamptz value from:
${firstParam}")
}
def tzValue = tzMatcher[0][1]
- def convertedResult = sql("SELECT CAST(CAST('${tzValue}' AS
DATETIME) AS STRING)")[0][0]
+ def convertedResult = sql("SELECT CAST(CAST('${tzValue}' AS
DATETIME(6)) AS STRING)")[0][0]
// Build datetime query with converted first parameter
def convertedParams = ["'${convertedResult}'"] + params.drop(1)
@@ -187,17 +175,13 @@ suite("doc_date_functions_test") {
def resDttmStr = resDttm.toString()
def expectedTz = "${resDttmStr}${timeZone}"
+ def normalizedResTz =
resTzStr.trim().replaceAll(/[\u0000-\u001F]/, '')
+ def normalizedExpectedTz =
expectedTz.trim().replaceAll(/[\u0000-\u001F]/, '')
- if (!resTzStr.equals(expectedTz)) {
- logger.error("Validation failed for DATE_TRUNC with
timestamptz: ${sqlWithTz}")
- logger.error("Expected: ${expectedTz}")
- logger.error("Got: ${resTzStr}")
- logger.error("Datetime result: ${resDttmStr}")
- return false
- }
+ assertTrue(normalizedResTz.equals(normalizedExpectedTz),
+ "Validation failed for DATE_TRUNC with timestamptz:
${sqlWithTz}, Expected: ${normalizedExpectedTz}
(len=${normalizedExpectedTz.length()}), Got: ${normalizedResTz}
(len=${normalizedResTz.length()}), RawExpected: ${expectedTz}, RawGot:
${resTzStr}, Datetime result: ${resDttmStr}")
logger.info("DATE_TRUNC timestamptz validation passed:
resTz=${resTzStr}, resDttm=${resDttmStr}")
- return true
} finally {
if (originalTimeZone != null) {
sql "set time_zone = '${originalTimeZone}'"
@@ -854,7 +838,7 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("select hour_floor('2023-07-13
22:28:18.456789+05:00', 4, '2023-07-13 08:00:00')", '+09:30')
validateTimestamptzCeilFloor("select hour_floor('2023-07-13
22:28:18.789123', 5, '2023-07-13 18:00:00+08:00')", '-09:30')
validateTimestamptzCeilFloor("select hour_floor('0001-07-13
22:28:18.456789+05:00', 4)", '+06:30')
- validateTimestamptzCeilFloor("select hour_floor('9999-12-31
22:28:18.456789+05:00', 4)", '-04:30')
+ validateTimestamptzCeilFloor("select hour_floor('9999-12-31
21:28:18.456789+05:00', 4)", '-04:30')
validateTimestamptzCeilFloor("select hour_floor('2023-07-13
23:59:59.999+00:00', 4, '2023-07-13 20:00:00+08:00')", '+03:30')
validateTimestamptzCeilFloor("select hour_floor('2023-12-31
23:30:00.111+00:00', 5)", '-03:30')
validateTimestamptzCeilFloor("select hour_floor('2023-07-13
22:28:18+05:00', 6, '0001-01-01 00:00:00')", '+10:30')
@@ -1060,11 +1044,11 @@ suite("doc_date_functions_test") {
qt_minute_floor_7 """SELECT MINUTE_FLOOR(NULL, 5),
MINUTE_FLOOR('2023-07-13 22:28:18', NULL)"""
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.999999+03:00')", '+13:00')
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.000001+08:00')", '-10:30')
- validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.500000+05:00', 5)", '+02:15')
+ validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.500000+05:00', 5)", '+02:45')
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.456789+05:00', '2023-07-13 22:20:00')", '-05:45')
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.789123', '2023-07-13 22:20:00+08:00')", '+06:30')
- validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.123456+05:00', 5, '2023-07-13 22:20:00')", '-04:15')
- validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.654321', 5, '2023-07-13 22:20:00+08:00')", '+09:15')
+ validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.123456+05:00', 5, '2023-07-13 22:20:00')", '-04:45')
+ validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:18.654321', 5, '2023-07-13 22:20:00+08:00')", '+09:45')
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
23:59:59.999+00:00')", '-08:45')
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
23:59:59.111+00:00', '2023-07-13 23:50:00+08:00')", '+04:00')
validateTimestamptzCeilFloor("SELECT MINUTE_FLOOR('2023-07-13
22:28:30.678-01:00', 15)", '-02:30')
@@ -1128,10 +1112,10 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('9999-06-15
10:30:45+05:00', 3, '9999-01-01 00:00:00')", '-03:30')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-01-31
23:59:59.999+08:00', 3)", '+01:30')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-11-30
23:59:59.999+08:00', 3, '2023-01-01 00:00:00')", '-09:00')
- validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2024-02-29
23:59:59.999+08:00', 3)", '+10:15')
+ validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2024-02-29
23:59:59.999+08:00', 3)", '+10:45')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-12-31
23:59:59.999+00:00', 3)", '-06:30')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('0001-12-31
23:59:59.999+08:00', 3)", '+08:30')
- validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-01-01
00:00:00.000001+08:00', 3)", '-01:15')
+ validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-01-01
00:00:00.000001+08:00', 3)", '-01:45')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-06-30
23:59:59.999999+08:00', 3)", '+07:00')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-07-13 22:28:18',
'2023-01-01 00:00:00+08:00')", '-12:00')
validateTimestamptzCeilFloor("SELECT MONTH_CEIL('2023-07-13
22:28:18+05:00', 5)", '+14:00')
@@ -1160,10 +1144,10 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-01-01
00:00:00.000001+08:00', 3)", '+02:00')
validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-06-30
23:59:59.999999+08:00', 3)", '-11:30')
validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13 22:28:18',
'2023-01-01 00:00:00+08:00')", '+13:45')
- validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13
22:28:18+05:00', 5)", '-03:15')
- validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13
22:28:18+05:00', 5, '2023-01-01')", '+06:15')
+ validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13
22:28:18+05:00', 5)", '-03:45')
+ validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13
22:28:18+05:00', 5, '2023-01-01')", '+06:45')
validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13 22:28:18', 5,
'2023-01-01 00:00:00+08:00')", '-01:45')
- validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('0001-01-15
12:00:00+08:00')", '+08:15')
+ validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('0001-01-15
12:00:00+08:00')", '+08:45')
validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('9999-12-15
12:00:00+08:00')", '-00:45')
validateTimestamptzCeilFloor("SELECT MONTH_FLOOR('2023-07-13
23:59:59+00:00', 5, '2023-01-01 00:00:00+08:00')", '+11:45')
// 52. MONTH function tests
@@ -1556,14 +1540,14 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('0001-01-01
00:00:00.000001+08:00', 5)", '-05:00')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2025-12-31
23:59:59.999+00:00', 20, '2025-12-31 23:59:00+08:00')", '+03:30')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-06-30
23:59:59.500+00:00', 30)", '-02:00')
- validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-07-13
22:28:18+05:00', 30, '0001-01-01 00:00:00')", '+00:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-07-13
22:28:18+05:00', 30, '0001-01-01 00:00:00')", '+00:45')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('9999-12-31
10:30:45+05:00', 30, '9999-12-31 10:30:00')", '-11:45')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-01-01
23:59:59.999+08:00', 30)", '+12:30')
- validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-06-30
23:59:59.999+08:00', 30, '2023-06-30 23:59:00')", '-08:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-06-30
23:59:59.999+08:00', 30, '2023-06-30 23:59:00')", '-08:45')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-12-31
23:59:59.999+00:00', 30)", '+05:30')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('0001-01-01
23:59:59.999+08:00', 20)", '-04:45')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-07-13
12:00:00.000001+08:00', 30)", '+09:45')
- validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-07-13
23:59:59.999999+08:00', 30)", '-06:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_CEIL('2023-07-13
23:59:59.999999+08:00', 30)", '-06:45')
validateTimestamptzCeilFloor("SELECT SECOND_CEIL('9999-12-31
20:55:59+05:00');", '+01:00')
// 64. SECOND_FLOOR function tests
@@ -1573,21 +1557,21 @@ suite("doc_date_functions_test") {
qt_second_floor_4 """SELECT SECOND_FLOOR('2025-01-23 12:34:56.789', 5)"""
qt_second_floor_5 """SELECT SECOND_FLOOR('2025-01-23', 30)"""
qt_second_floor_6 """SELECT SECOND_FLOOR(NULL, 5),
SECOND_FLOOR('2025-01-23 12:34:56', NULL)"""
- validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18.456789+05:00', 5)", '+11:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18.456789+05:00', 5)", '+11:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18.456789+05:00', 10, '2023-07-13 22:28:00')", '-10:45')
- validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18.654321', 10, '2023-07-13 22:28:00+08:00')", '+04:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18.654321', 10, '2023-07-13 22:28:00+08:00')", '+04:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('0001-01-01
00:00:00.000001+08:00', 5)", '-03:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('9999-12-31
23:59:59.999999-02:00', 5)", '+08:00')
- validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2025-12-31
23:59:59.999+00:00', 20, '2025-12-31 23:59:00+08:00')", '-07:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2025-12-31
23:59:59.999+00:00', 20, '2025-12-31 23:59:00+08:00')", '-07:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-06-30
23:59:59.500+00:00', 30)", '+13:30')
- validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18+05:00', 30, '0001-01-01 00:00:00')", '-00:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
22:28:18+05:00', 30, '0001-01-01 00:00:00')", '-00:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('9999-12-31
10:30:45+05:00', 30, '9999-12-31 10:30:00')", '+06:45')
- validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-01-01
23:59:59.999+08:00', 30)", '-05:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-01-01
23:59:59.999+08:00', 30)", '-05:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-06-30
23:59:59.999+08:00', 30, '2023-06-30 23:59:00')", '+02:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-12-31
23:59:59.999+00:00', 30)", '-01:30')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('0001-01-01
23:59:59.999+08:00', 20)", '+09:00')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('9999-12-31
23:59:59.123+08:00', 20)", '-08:30')
- validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
12:00:00.000001+08:00', 30)", '+05:15')
+ validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
12:00:00.000001+08:00', 30)", '+05:45')
validateTimestamptzCeilFloor("SELECT SECOND_FLOOR('2023-07-13
23:59:59.999999+08:00', 30)", '-06:45')
// 65. SECOND function tests
@@ -1776,12 +1760,12 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-06-30
23:59:59.999+08:00', 2, '2023-01-02 00:00:00')", '-02:00')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-12-31
23:59:59.999+00:00', 2)", '+06:30')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('0001-01-07
23:59:59.999+08:00', 1)", '-00:45')
- validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-01-01
00:00:00.000001+08:00', 2)", '+08:15')
+ validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-01-01
00:00:00.000001+08:00', 2)", '+08:45')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-08
23:59:59.999999+08:00', 2)", '-01:00')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-13 22:28:18',
'2023-07-03 00:00:00+08:00')", '+13:00')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-13
22:28:18+05:00', 2)", '-09:45')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-13
22:28:18+05:00', 2, '2023-07-03')", '+05:00')
- validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-13 22:28:18', 2,
'2023-07-03 00:00:00+08:00')", '-04:15')
+ validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-13 22:28:18', 2,
'2023-07-03 00:00:00+08:00')", '-04:45')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('0001-01-08
12:00:00+08:00')", '+12:00')
validateTimestamptzCeilFloor("SELECT WEEK_CEIL('2023-07-13
23:59:59+00:00', 2, '2023-07-03 00:00:00+08:00')", '-07:30')
@@ -1802,20 +1786,20 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-31
20:00:00+00:00', '2023-07-03 00:00:00+08:00')", '-10:30')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13
22:28:18+05:00', 2, '0001-01-01 00:00:00')", '+04:30')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('9999-06-15
10:30:45+05:00', 2, '9999-06-07 00:00:00')", '-03:45')
- validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-01-07
23:59:59.999+08:00', 2)", '+09:15')
+ validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-01-07
23:59:59.999+08:00', 2)", '+09:45')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-06-30
23:59:59.999+08:00', 2, '2023-01-02 00:00:00')", '-02:30')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-12-31
23:59:59.999+00:00', 2)", '+06:45')
- validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('0001-01-07
23:59:59.999+08:00', 1)", '-00:15')
+ validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('0001-01-07
23:59:59.999+08:00', 1)", '-00:45')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('9999-12-31
12:00:00.123+08:00', 1)", '+08:30')
- validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-01-01
00:00:00.000001+08:00', 2)", '-01:15')
- validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-08
23:59:59.999999+08:00', 2)", '+13:15')
+ validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-01-01
00:00:00.000001+08:00', 2)", '-01:45')
+ validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-08
23:59:59.999999+08:00', 2)", '+13:45')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13 22:28:18',
'2023-07-03 00:00:00+08:00')", '-09:30')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13
22:28:18+05:00', 2)", '+05:30')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13
22:28:18+05:00', 2, '2023-07-03')", '-04:45')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13 22:28:18', 2,
'2023-07-03 00:00:00+08:00')", '+12:30')
validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('0001-01-08
12:00:00+08:00')", '-07:45')
- validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('9999-12-27
12:00:00+08:00')", '+02:15')
- validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13
23:59:59+00:00', 2, '2023-07-03 00:00:00+08:00')", '-11:15')
+ validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('9999-12-27
12:00:00+08:00')", '+02:45')
+ validateTimestamptzCeilFloor("SELECT WEEK_FLOOR('2023-07-13
23:59:59+00:00', 2, '2023-07-03 00:00:00+08:00')", '-11:45')
// 87. WEEK function tests
qt_week_1 """SELECT WEEK('2020-01-01') AS week_result"""
@@ -1881,11 +1865,11 @@ suite("doc_date_functions_test") {
qt_year_ceil_5 """SELECT YEAR_CEIL('2023-07-13', 1, '2020-01-01 08:30:00')
AS result"""
qt_year_ceil_6 """SELECT YEAR_CEIL('2023-01-01', 1, '2023-01-01') AS
result"""
qt_year_ceil_7 """SELECT YEAR_CEIL(NULL, 1) AS result"""
- validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2025-12-31
23:59:59+05:00')", '+10:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2025-12-31
23:59:59+05:00')", '+10:45')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2025-12-31
20:00:00+00:00', '2020-01-01 00:00:00+08:00')", '-08:45')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-07-13 22:28:18',
'2020-01-01 00:00:00+08:00')", '+03:30')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-07-13
22:28:18+05:00', 5)", '-02:00')
- validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-07-13
22:28:18+05:00', 2, '2020-01-01')", '+07:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-07-13
22:28:18+05:00', 2, '2020-01-01')", '+07:45')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-07-13 22:28:18', 2,
'2020-01-01 00:00:00+08:00')", '-12:00')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('0001-06-15
12:30:00+08:00')", '+01:30')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2025-12-31
20:00:00+00:00', 3, '2020-01-01 00:00:00+08:00')", '-11:30')
@@ -1893,7 +1877,7 @@ suite("doc_date_functions_test") {
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-07-13 22:28:18', 3,
'0001-06-15 00:00:00+08:00')", '-05:00')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('9998-06-15
10:30:45+05:00', 1, '9998-01-01 00:00:00')", '+11:00')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('9998-10-20 10:30:45', 1,
'9998-01-01 00:00:00+08:00')", '-06:00')
- validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-12-31
23:59:59.999+08:00', 2)", '+12:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-12-31
23:59:59.999+08:00', 2)", '+12:45')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-12-31
23:59:59.999+00:00', 3, '2020-01-01 00:00:00')", '-01:00')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('0001-12-31
23:59:59.999+08:00', 1)", '+10:30')
validateTimestamptzCeilFloor("SELECT YEAR_CEIL('2023-01-01
00:00:00.000001+08:00', 2)", '-09:30')
@@ -1913,21 +1897,21 @@ suite("doc_date_functions_test") {
qt_year_floor_11 """SELECT YEAR_FLOOR(NULL, 1) AS result"""
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2025-12-31
23:59:59+05:00')", '+10:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2025-12-31
20:00:00+00:00', '2020-01-01 00:00:00+08:00')", '-08:30')
- validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13 22:28:18',
'2020-01-01 00:00:00+08:00')", '+03:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13 22:28:18',
'2020-01-01 00:00:00+08:00')", '+03:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13
22:28:18+05:00', 5)", '-02:30')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13
22:28:18+05:00', 2, '2020-01-01')", '+07:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13 22:28:18', 2,
'2020-01-01 00:00:00+08:00')", '-11:45')
- validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('0001-06-15
12:30:00+08:00')", '+01:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('0001-06-15
12:30:00+08:00')", '+01:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('9999-06-15
12:30:00+08:00')", '-11:30')
- validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2025-12-31
20:00:00+00:00', 3, '2020-01-01 00:00:00+08:00')", '+05:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2025-12-31
20:00:00+00:00', 3, '2020-01-01 00:00:00+08:00')", '+05:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13
22:28:18+05:00', 5, '0001-01-01 00:00:00')", '-05:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-07-13 22:28:18', 3,
'0001-06-15 00:00:00+08:00')", '+11:30')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('9999-06-15
10:30:45+05:00', 1, '9999-01-01 00:00:00')", '-06:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('9999-10-20 10:30:45', 1,
'9999-01-01 00:00:00+08:00')", '+12:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-12-31
23:59:59.999+08:00', 2)", '-01:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-12-31
23:59:59.999+00:00', 3, '2020-01-01 00:00:00')", '+09:45')
- validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('0001-12-31
23:59:59.999+08:00', 1)", '-10:15')
- validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('9999-12-31
12:00:00.123+08:00', 1)", '+04:15')
+ validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('0001-12-31
23:59:59.999+08:00', 1)", '-10:45')
+ validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('9999-12-31
12:00:00.123+08:00', 1)", '+04:45')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-01-01
00:00:00.000001+08:00', 2)", '-03:30')
validateTimestamptzCeilFloor("SELECT YEAR_FLOOR('2023-12-31
23:59:59.999999+08:00', 2)", '+06:30')
@@ -2443,7 +2427,7 @@ suite("doc_date_functions_test") {
testFoldConst("SELECT HOUR_CEIL('2023-07-13 22:28:18.456789+05:00', 4,
'2023-07-13 08:00:00')")
testFoldConst("SELECT HOUR_CEIL('2023-07-13 22:28:18.789123', 5,
'2023-07-13 18:00:00+08:00')")
testFoldConst("SELECT HOUR_CEIL('0001-07-13 22:28:18.456789+05:00', 4)")
- testFoldConst("SELECT HOUR_CEIL('9999-12-31 22:28:18.456789+05:00', 4)")
+ testFoldConst("SELECT HOUR_CEIL('9999-12-30 22:28:18.456789+05:00', 4)")
testFoldConst("SELECT HOUR_CEIL('2023-07-13 23:59:59.999+00:00', 4,
'2023-07-13 20:00:00+08:00')")
testFoldConst("SELECT HOUR_CEIL('2023-12-31 23:30:00.111+00:00', 5)")
@@ -2457,7 +2441,7 @@ suite("doc_date_functions_test") {
testFoldConst("SELECT HOUR_FLOOR('2023-07-13 22:28:18.456789+05:00', 4,
'2023-07-13 08:00:00')")
testFoldConst("SELECT HOUR_FLOOR('2023-07-13 22:28:18.789123', 5,
'2023-07-13 18:00:00+08:00')")
testFoldConst("SELECT HOUR_FLOOR('0001-07-13 22:28:18.456789+05:00', 4)")
- testFoldConst("SELECT HOUR_FLOOR('9999-12-31 22:28:18.456789+05:00', 4)")
+ testFoldConst("SELECT HOUR_FLOOR('9999-12-30 22:28:18.456789+05:00', 4)")
testFoldConst("SELECT HOUR_FLOOR('2023-07-13 23:59:59.999+00:00', 4,
'2023-07-13 20:00:00+08:00')")
testFoldConst("SELECT HOUR_FLOOR('2023-12-31 23:30:00.111+00:00', 5)")
@@ -3368,15 +3352,15 @@ suite("doc_date_functions_test") {
qt_quarter_ceil_7 """SELECT QUARTER_CEIL(NULL, 2),
QUARTER_CEIL('2023-07-13 22:28:18', NULL)"""
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13
22:28:18+05:00')", '+11:00')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-12-31
20:00:00+00:00', '2023-01-01 00:00:00+08:00')", '-09:00')
- validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13 22:28:18',
'2023-01-01 00:00:00+08:00')", '+04:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13 22:28:18',
'2023-01-01 00:00:00+08:00')", '+04:45')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13
22:28:18+05:00', 2)", '-05:00')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13
22:28:18+05:00', 2, '2023-01-01')", '+07:00')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13 22:28:18',
2, '2023-01-01 00:00:00+08:00')", '-11:30')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('0001-01-15
12:00:00+08:00')", '+02:45')
- validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13
23:59:59+00:00', 2, '2023-01-01 00:00:00+08:00')", '-03:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13
23:59:59+00:00', 2, '2023-01-01 00:00:00+08:00')", '-03:45')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-07-13
22:28:18+05:00', 2, '0001-01-01 00:00:00')", '+08:30')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-03-31
23:59:59.999+08:00', 2)", '-06:45')
- validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-09-30
23:59:59.999+08:00', 2, '2023-01-01 00:00:00')", '+13:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-09-30
23:59:59.999+08:00', 2, '2023-01-01 00:00:00')", '+13:45')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-12-31
23:59:59.999+00:00', 2)", '-10:00')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('0001-03-31
23:59:59.999+08:00', 1)", '+05:45')
validateTimestamptzCeilFloor("SELECT QUARTER_CEIL('2023-01-01
00:00:00.000001+08:00', 2)", '-01:00')
@@ -3403,24 +3387,24 @@ suite("doc_date_functions_test") {
qt_quarter_floor_5 """SELECT QUARTER_FLOOR('2023-07-13 22:28:18.456789',
2)"""
qt_quarter_floor_6 """SELECT QUARTER_FLOOR('2023-07-13', 1)"""
qt_quarter_floor_7 """SELECT QUARTER_FLOOR(NULL, 2),
QUARTER_FLOOR('2023-07-13 22:28:18', NULL)"""
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00')", '+11:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00')", '+11:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-12-31
20:00:00+00:00', '2023-01-01 00:00:00+08:00')", '-09:30')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13 22:28:18',
'2023-01-01 00:00:00+08:00')", '+04:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00', 2)", '-05:30')
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00', 2, '2023-01-01')", '+07:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00', 2, '2023-01-01')", '+07:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13 22:28:18',
2, '2023-01-01 00:00:00+08:00')", '-11:45')
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('0001-01-15
12:00:00+08:00')", '+02:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('0001-01-15
12:00:00+08:00')", '+02:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('9999-12-15
12:00:00+08:00')", '-03:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
23:59:59+00:00', 2, '2023-01-01 00:00:00+08:00')", '+08:45')
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00', 2, '0001-01-01 00:00:00')", '-06:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-07-13
22:28:18+05:00', 2, '0001-01-01 00:00:00')", '-06:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('9999-06-15
10:30:45+05:00', 1, '9999-01-01 00:00:00')", '+13:30')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-03-31
23:59:59.999+08:00', 2)", '-10:30')
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-09-30
23:59:59.999+08:00', 2, '2023-01-01 00:00:00')", '+05:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-09-30
23:59:59.999+08:00', 2, '2023-01-01 00:00:00')", '+05:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-12-31
23:59:59.999+00:00', 2)", '-01:30')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('0001-03-31
23:59:59.999+08:00', 1)", '+12:45')
validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('9999-12-31
12:00:00.123+08:00', 1)", '-07:45')
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-01-01
00:00:00.000001+08:00', 2)", '+01:15')
- validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-06-30
23:59:59.999999+08:00', 2)", '-00:15')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-01-01
00:00:00.000001+08:00', 2)", '+01:45')
+ validateTimestamptzCeilFloor("SELECT QUARTER_FLOOR('2023-06-30
23:59:59.999999+08:00', 2)", '-00:45')
testFoldConst("SELECT QUARTER_FLOOR('2023-07-13 22:28:18')")
testFoldConst("SELECT QUARTER_FLOOR('2023-07-13 22:28:18', 2)")
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]