This is an automated email from the ASF dual-hosted git repository.

zclll 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 69f82ad67db [Feature](variable) Support session variable lc_time_names 
(#56915)
69f82ad67db is described below

commit 69f82ad67db41dc908ca0aae9059ff59d8437160
Author: linrrarity <[email protected]>
AuthorDate: Wed Oct 22 12:38:52 2025 +0800

    [Feature](variable) Support session variable lc_time_names (#56915)
    
    ### What problem does this PR solve?
    
    Issue Number: #48203
    
    Related PR: #xxx
    
    Problem Summary:
    
    ### Release note
    
    Support session variable `lc_time_name`
    The supported locale are consistent with
    [MySQL](https://dev.mysql.com/doc/refman/8.4/en/locale-support.html).
    
    ```text
    mysql> SELECT DAYNAME('2025-10-15');
    +-----------------------+
    | DAYNAME('2025-10-15') |
    +-----------------------+
    | Wednesday             |
    +-----------------------+
    1 row in set (0.02 sec)
    
    mysql> SELECT MONTHNAME('2025-10-15');
    +-------------------------+
    | MONTHNAME('2025-10-15') |
    +-------------------------+
    | October                 |
    +-------------------------+
    1 row in set (0.01 sec)
    
    mysql> SET lc_time_names='zh_CN';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT DAYNAME('2025-10-15');
    +-----------------------+
    | DAYNAME('2025-10-15') |
    +-----------------------+
    | 星期三                |
    +-----------------------+
    1 row in set (0.01 sec)
    
    mysql> SELECT MONTHNAME('2025-10-15');
    +-------------------------+
    | MONTHNAME('2025-10-15') |
    +-------------------------+
    | 十月                    |
    +-------------------------+
    1 row in set (0.02 sec)
    ```
---
 be/src/runtime/runtime_state.cpp                   |   1 +
 be/src/runtime/runtime_state.h                     |   2 +
 be/src/vec/functions/date_time_transforms.h        |  15 +-
 .../function_date_or_datetime_to_string.cpp        |  78 +++-
 be/src/vec/runtime/vdatetime_value.cpp             |  34 ++
 be/src/vec/runtime/vdatetime_value.h               |   4 +
 .../executable/DateTimeExtractAndTransform.java    |  28 +-
 .../main/java/org/apache/doris/qe/Coordinator.java |   1 +
 .../org/apache/doris/qe/CoordinatorContext.java    |   1 +
 .../java/org/apache/doris/qe/SessionVariable.java  |  54 +++
 gensrc/thrift/PaloInternalService.thrift           |   3 +
 .../sql-functions/doc_date_functions_test.out      | 351 ++++++++++++++++
 .../sql-functions/doc_date_functions_test.groovy   | 454 +++++++++++++++++++++
 13 files changed, 1013 insertions(+), 13 deletions(-)

diff --git a/be/src/runtime/runtime_state.cpp b/be/src/runtime/runtime_state.cpp
index 8258443c3f6..33db0f60e7c 100644
--- a/be/src/runtime/runtime_state.cpp
+++ b/be/src/runtime/runtime_state.cpp
@@ -214,6 +214,7 @@ Status RuntimeState::init(const TUniqueId& 
fragment_instance_id, const TQueryOpt
                           const TQueryGlobals& query_globals, ExecEnv* 
exec_env) {
     _fragment_instance_id = fragment_instance_id;
     _query_options = query_options;
+    _lc_time_names = query_globals.lc_time_names;
     if (query_globals.__isset.time_zone && query_globals.__isset.nano_seconds) 
{
         _timezone = query_globals.time_zone;
         _timestamp_ms = query_globals.timestamp_ms;
diff --git a/be/src/runtime/runtime_state.h b/be/src/runtime/runtime_state.h
index c2183c6dd59..3d89f4aa0d4 100644
--- a/be/src/runtime/runtime_state.h
+++ b/be/src/runtime/runtime_state.h
@@ -163,6 +163,7 @@ public:
     // if possible, use timezone_obj() rather than timezone()
     const std::string& timezone() const { return _timezone; }
     const cctz::time_zone& timezone_obj() const { return _timezone_obj; }
+    const std::string& lc_time_names() const { return _lc_time_names; }
     const std::string& user() const { return _user; }
     const TUniqueId& query_id() const { return _query_id; }
     const TUniqueId& fragment_instance_id() const { return 
_fragment_instance_id; }
@@ -747,6 +748,7 @@ private:
     int32_t _nano_seconds;
     std::string _timezone;
     cctz::time_zone _timezone_obj;
+    std::string _lc_time_names;
 
     TUniqueId _query_id;
     // fragment id for each TPipelineFragmentParams
diff --git a/be/src/vec/functions/date_time_transforms.h 
b/be/src/vec/functions/date_time_transforms.h
index 55b426812c6..89dffe288cf 100644
--- a/be/src/vec/functions/date_time_transforms.h
+++ b/be/src/vec/functions/date_time_transforms.h
@@ -163,8 +163,10 @@ struct DayNameImpl {
     static constexpr auto max_size = MAX_DAY_NAME_LEN;
 
     static auto execute(const typename PrimitiveTypeTraits<PType>::CppType& dt,
-                        ColumnString::Chars& res_data, size_t& offset) {
-        const auto* day_name = dt.day_name();
+                        ColumnString::Chars& res_data, size_t& offset,
+                        const char* const* day_names) {
+        DCHECK(day_names != nullptr);
+        const auto* day_name = dt.day_name_with_locale(day_names);
         if (day_name != nullptr) {
             auto len = strlen(day_name);
             memcpy(&res_data[offset], day_name, len);
@@ -186,7 +188,8 @@ struct ToIso8601Impl {
     static constexpr auto max_size = std::is_same_v<ArgType, UInt32> ? 10 : 26;
 
     static auto execute(const typename PrimitiveTypeTraits<PType>::CppType& dt,
-                        ColumnString::Chars& res_data, size_t& offset) {
+                        ColumnString::Chars& res_data, size_t& offset,
+                        const char* const* /*names_ptr*/) {
         auto length = dt.to_buffer((char*)res_data.data() + offset,
                                    std::is_same_v<ArgType, UInt32> ? -1 : 6);
         if (std::is_same_v<ArgType, UInt64>) {
@@ -210,8 +213,10 @@ struct MonthNameImpl {
     static constexpr auto max_size = MAX_MONTH_NAME_LEN;
 
     static auto execute(const typename PrimitiveTypeTraits<PType>::CppType& dt,
-                        ColumnString::Chars& res_data, size_t& offset) {
-        const auto* month_name = dt.month_name();
+                        ColumnString::Chars& res_data, size_t& offset,
+                        const char* const* month_names) {
+        DCHECK(month_names != nullptr);
+        const auto* month_name = dt.month_name_with_locale(month_names);
         if (month_name != nullptr) {
             auto len = strlen(month_name);
             memcpy(&res_data[offset], month_name, len);
diff --git a/be/src/vec/functions/function_date_or_datetime_to_string.cpp 
b/be/src/vec/functions/function_date_or_datetime_to_string.cpp
index f8177bb69a5..4d1bbff58f9 100644
--- a/be/src/vec/functions/function_date_or_datetime_to_string.cpp
+++ b/be/src/vec/functions/function_date_or_datetime_to_string.cpp
@@ -18,6 +18,10 @@
 // 
https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionDateOrDatetimeToString.cpp
 // and modified by Doris
 
+#include <unicode/dtfmtsym.h>
+#include <unicode/locid.h>
+#include <unicode/unistr.h>
+
 #include <cstddef>
 #include <memory>
 #include <utility>
@@ -75,6 +79,67 @@ public:
 
     ColumnNumbers get_arguments_that_are_always_constant() const override { 
return {1}; }
 
+    // In ICU, Week_array: {"", "Sunday", "Monday", ..., "Saturday"}, size = 8
+    // Month_array: {"January", "February", ..., "December"}, size = 12
+    static constexpr size_t DAY_NUM_IN_ICU = 8;
+    static constexpr size_t MONTH_NUM_IN_ICU = 12;
+    // day_names: {"Monday", ..., "Sunday"}
+    // month_names: {"", "January", ..., "December"}
+    struct LocaleDayMonthNameState {
+        std::string locale_name;
+        std::vector<std::string> day_name_storage {7};
+        std::vector<std::string> month_name_storage {13};
+        const char* day_names[7];
+        const char* month_names[13];
+    };
+
+    Status open(FunctionContext* context, FunctionContext::FunctionStateScope 
scope) override {
+        if (scope == FunctionContext::THREAD_LOCAL) {
+            return Status::OK();
+        }
+
+        auto state = std::make_shared<LocaleDayMonthNameState>();
+        state->locale_name = context->state()->lc_time_names();
+#ifdef BE_TEST
+        state->locale_name = "en_US";
+#endif
+        UErrorCode status = U_ZERO_ERROR;
+        icu::Locale locale(state->locale_name.c_str());
+        icu::DateFormatSymbols symbols(locale, status);
+        if (U_FAILURE(status)) [[unlikely]] {
+            return Status::FatalError("Failed to create ICU DateFormatSymbols 
for locale {}",
+                                      state->locale_name);
+        }
+
+        int32_t day_count, month_count;
+        const icu::UnicodeString* days = symbols.getWeekdays(day_count);
+        const icu::UnicodeString* months = symbols.getMonths(month_count);
+        if (month_count != MONTH_NUM_IN_ICU || day_count != DAY_NUM_IN_ICU) 
[[unlikely]] {
+            return Status::FatalError(
+                    "Wrong number of month or day names for locale {}: got {} 
months and {} days",
+                    state->locale_name, month_count, day_count - 1);
+        }
+        for (int i = 0; i < MONTH_NUM_IN_ICU; ++i) {
+            months[i].toUTF8String(state->month_name_storage[i + 1]);
+            state->month_names[i + 1] = state->month_name_storage[i + 
1].c_str();
+        }
+
+        // In ICU, the first array is always like {"", "Sunday", "Monday", 
..., "Saturday"}
+        // so here skip the first empty string and adjust the order of day 
names into {"Monday", ..., "Sunday"}
+        for (int i = 1; i < DAY_NUM_IN_ICU; ++i) {
+            if (i == 1) {
+                days[i].toUTF8String(state->day_name_storage[6]);
+                state->day_names[6] = state->day_name_storage[6].c_str();
+            } else {
+                days[i].toUTF8String(state->day_name_storage[i - 2]);
+                state->day_names[i - 2] = state->day_name_storage[i - 
2].c_str();
+            }
+        }
+
+        context->set_function_state(scope, state);
+        return IFunction::open(context, scope);
+    }
+
     Status execute_impl(FunctionContext* context, Block& block, const 
ColumnNumbers& arguments,
                         uint32_t result, size_t input_rows_count) const 
override {
         const ColumnPtr source_col = 
block.get_by_position(arguments[0]).column;
@@ -102,11 +167,20 @@ private:
         res_offsets.resize(len);
 
         size_t offset = 0;
+        auto* state = reinterpret_cast<LocaleDayMonthNameState*>(
+                context->get_function_state(FunctionContext::FRAGMENT_LOCAL));
+        const char* const* names_ptr = nullptr;
+        if constexpr (std::is_same_v<Transform, 
DayNameImpl<Transform::OpArgType>>) {
+            names_ptr = state->day_names;
+        } else if constexpr (std::is_same_v<Transform, 
MonthNameImpl<Transform::OpArgType>>) {
+            names_ptr = state->month_names;
+        }
+
         for (int i = 0; i < len; ++i) {
             const auto& t = ts[i];
             const auto date_time_value = binary_cast<NativeType, DateType>(t);
-            res_offsets[i] =
-                    cast_set<UInt32>(Transform::execute(date_time_value, 
res_data, offset));
+            res_offsets[i] = cast_set<UInt32>(
+                    Transform::execute(date_time_value, res_data, offset, 
names_ptr));
             DCHECK(date_time_value.is_valid_date());
         }
         res_data.resize(res_offsets[res_offsets.size() - 1]);
diff --git a/be/src/vec/runtime/vdatetime_value.cpp 
b/be/src/vec/runtime/vdatetime_value.cpp
index e580896f54f..3b77981e3ea 100644
--- a/be/src/vec/runtime/vdatetime_value.cpp
+++ b/be/src/vec/runtime/vdatetime_value.cpp
@@ -20,6 +20,8 @@
 #include <cctz/civil_time.h>
 #include <cctz/time_zone.h>
 #include <glog/logging.h>
+#include <unicode/dtfmtsym.h>
+#include <unicode/locid.h>
 
 #include <cctype>
 #include <cstddef>
@@ -1618,6 +1620,13 @@ const char* VecDateTimeValue::month_name() const {
     return s_month_name[_month];
 }
 
+const char* VecDateTimeValue::month_name_with_locale(const char* const* 
month_names) const {
+    if (_month < 1 || _month > 12) {
+        return nullptr;
+    }
+    return month_names[_month];
+}
+
 const char* VecDateTimeValue::day_name() const {
     int day = weekday();
     if (day < 0 || day >= 7) {
@@ -1626,6 +1635,14 @@ const char* VecDateTimeValue::day_name() const {
     return s_day_name[day];
 }
 
+const char* VecDateTimeValue::day_name_with_locale(const char* const* 
day_names) const {
+    int day = weekday();
+    if (day < 0 || day >= 7) {
+        return nullptr;
+    }
+    return day_names[day];
+}
+
 VecDateTimeValue VecDateTimeValue::local_time() {
     VecDateTimeValue value;
     value.from_unixtime(time(nullptr), TimezoneUtils::default_time_zone);
@@ -2906,6 +2923,23 @@ const char* DateV2Value<T>::day_name() const {
     return s_day_name[day];
 }
 
+template <typename T>
+const char* DateV2Value<T>::month_name_with_locale(const char* const* 
month_names) const {
+    if (date_v2_value_.month_ < 1 || date_v2_value_.month_ > 12) {
+        return nullptr;
+    }
+    return month_names[date_v2_value_.month_];
+}
+
+template <typename T>
+const char* DateV2Value<T>::day_name_with_locale(const char* const* day_names) 
const {
+    int day = weekday();
+    if (day < 0 || day >= 7) {
+        return nullptr;
+    }
+    return day_names[day];
+}
+
 template <typename T>
 void DateV2Value<T>::unchecked_set_time(uint16_t year, uint8_t month, uint8_t 
day, uint8_t hour,
                                         uint8_t minute, uint16_t second, 
uint32_t microsecond) {
diff --git a/be/src/vec/runtime/vdatetime_value.h 
b/be/src/vec/runtime/vdatetime_value.h
index 7140c0845ed..ffb5da58408 100644
--- a/be/src/vec/runtime/vdatetime_value.h
+++ b/be/src/vec/runtime/vdatetime_value.h
@@ -647,8 +647,10 @@ public:
     bool operator>(const DateV2Value<T>& other) const;
 
     const char* month_name() const;
+    const char* month_name_with_locale(const char* const* month_names) const;
 
     const char* day_name() const;
+    const char* day_name_with_locale(const char* const* day_names) const;
 
     VecDateTimeValue& operator+=(int64_t count) {
         bool is_neg = false;
@@ -1175,8 +1177,10 @@ public:
     DateV2Value<T>& operator=(const DateV2Value<T>& other) = default;
 
     const char* month_name() const;
+    const char* month_name_with_locale(const char* const* month_names) const;
 
     const char* day_name() const;
+    const char* day_name_with_locale(const char* const* day_names) const;
 
     DateV2Value<T>& operator+=(int64_t count) {
         bool is_neg = false;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
index 087fa867948..204ec49f638 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/DateTimeExtractAndTransform.java
@@ -46,6 +46,7 @@ import org.apache.doris.nereids.types.DateV2Type;
 import org.apache.doris.nereids.types.DecimalV3Type;
 import org.apache.doris.nereids.types.StringType;
 import org.apache.doris.nereids.util.DateUtils;
+import org.apache.doris.qe.ConnectContext;
 
 import org.apache.commons.lang3.StringUtils;
 
@@ -1025,40 +1026,55 @@ public class DateTimeExtractAndTransform {
         return new TinyIntLiteral((byte) 
date.toJavaDateType().get(WeekFields.ISO.weekOfWeekBasedYear()));
     }
 
+    /**
+     * Get locale from session variable lc_time_names, fallback to default if 
not available
+     */
+    private static Locale getSessionLocale() {
+        ConnectContext ctx = ConnectContext.get();
+        if (ctx != null && ctx.getSessionVariable() != null) {
+            String lcTimeNames = ctx.getSessionVariable().getLcTimeNames();
+            if (lcTimeNames != null && !lcTimeNames.isEmpty()) {
+                String[] parts = lcTimeNames.split("_");
+                return new Locale(parts[0], parts[1]);
+            }
+        }
+        return Locale.getDefault();
+    }
+
     @ExecFunction(name = "dayname")
     public static Expression dayName(DateTimeV2Literal dateTime) {
         return new 
VarcharLiteral(dateTime.toJavaDateType().getDayOfWeek().getDisplayName(TextStyle.FULL,
-                Locale.getDefault()));
+                getSessionLocale()));
     }
 
     @ExecFunction(name = "dayname")
     public static Expression dayName(DateTimeLiteral dateTime) {
         return new 
VarcharLiteral(dateTime.toJavaDateType().getDayOfWeek().getDisplayName(TextStyle.FULL,
-                Locale.getDefault()));
+                getSessionLocale()));
     }
 
     @ExecFunction(name = "dayname")
     public static Expression dayName(DateV2Literal date) {
         return new 
VarcharLiteral(date.toJavaDateType().getDayOfWeek().getDisplayName(TextStyle.FULL,
-                Locale.getDefault()));
+                getSessionLocale()));
     }
 
     @ExecFunction(name = "monthname")
     public static Expression monthName(DateTimeV2Literal dateTime) {
         return new 
VarcharLiteral(dateTime.toJavaDateType().getMonth().getDisplayName(TextStyle.FULL,
-                Locale.getDefault()));
+                getSessionLocale()));
     }
 
     @ExecFunction(name = "monthname")
     public static Expression monthName(DateTimeLiteral dateTime) {
         return new 
VarcharLiteral(dateTime.toJavaDateType().getMonth().getDisplayName(TextStyle.FULL,
-                Locale.getDefault()));
+                getSessionLocale()));
     }
 
     @ExecFunction(name = "monthname")
     public static Expression monthName(DateV2Literal date) {
         return new 
VarcharLiteral(date.toJavaDateType().getMonth().getDisplayName(TextStyle.FULL,
-                Locale.getDefault()));
+                getSessionLocale()));
     }
 
     @ExecFunction(name = "from_second")
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
index 27f2348f59c..9d44f15384e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
@@ -358,6 +358,7 @@ public class Coordinator implements CoordInterface {
         } else {
             
this.queryGlobals.setTimeZone(context.getSessionVariable().getTimeZone());
         }
+        
this.queryGlobals.setLcTimeNames(context.getSessionVariable().getLcTimeNames());
         this.assignedRuntimeFilters = planner.getRuntimeFilters();
         this.topnFilters = planner.getTopnFilters();
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/qe/CoordinatorContext.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/CoordinatorContext.java
index 0fbcb5690fb..c03253341fc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/CoordinatorContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/CoordinatorContext.java
@@ -351,6 +351,7 @@ public class CoordinatorContext {
         } else {
             
queryGlobals.setTimeZone(context.getSessionVariable().getTimeZone());
         }
+        
queryGlobals.setLcTimeNames(context.getSessionVariable().getLcTimeNames());
         return queryGlobals;
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 03e1832c8c9..5611968ee70 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -131,6 +131,29 @@ public class SessionVariable implements Serializable, 
Writable {
     public static final String NET_WRITE_TIMEOUT = "net_write_timeout";
     public static final String NET_READ_TIMEOUT = "net_read_timeout";
     public static final String TIME_ZONE = "time_zone";
+    public static final String LC_TIME_NAMES = "lc_time_names";
+    private static final ImmutableSet<String> SUPPORTED_LC_TIME_NAMES = 
ImmutableSet.of(
+            "ar_AE", "ar_BH", "ar_JO", "ar_SA", "ar_SY", "be_BY",
+            "bg_BG", "ca_ES", "cs_CZ", "da_DK", "de_AT", "de_DE",
+            "en_US", "es_ES", "et_EE", "eu_ES", "fi_FI", "fo_FO",
+            "fr_FR", "gl_ES", "gu_IN", "he_IL", "hi_IN", "hr_HR",
+            "hu_HU", "id_ID", "is_IS", "it_CH", "ja_JP", "ko_KR",
+            "lt_LT", "lv_LV", "mk_MK", "mn_MN", "ms_MY", "nb_NO",
+            "nl_NL", "pl_PL", "pt_BR", "pt_PT", "ro_RO", "ru_RU",
+            "ru_UA", "sk_SK", "sl_SI", "sq_AL", "sr_RS", "sv_SE",
+            "ta_IN", "te_IN", "th_TH", "tr_TR", "uk_UA", "ur_PK",
+            "vi_VN", "zh_CN", "zh_TW", "ar_DZ", "ar_EG", "ar_IN",
+            "ar_IQ", "ar_KW", "ar_LB", "ar_LY", "ar_MA", "ar_OM",
+            "ar_QA", "ar_SD", "ar_TN", "ar_YE", "de_BE", "de_CH",
+            "de_LU", "en_AU", "en_CA", "en_GB", "en_IN", "en_NZ",
+            "en_PH", "en_ZA", "en_ZW", "es_AR", "es_BO", "es_CL",
+            "es_CO", "es_CR", "es_DO", "es_EC", "es_GT", "es_HN",
+            "es_MX", "es_NI", "es_PA", "es_PE", "es_PR", "es_PY",
+            "es_SV", "es_US", "es_UY", "es_VE", "fr_BE", "fr_CA",
+            "fr_CH", "fr_LU", "it_IT", "nl_BE", "no_NO", "sv_FI",
+            "zh_HK", "el_GR", "rm_CH"
+    );
+
     public static final String SQL_SAFE_UPDATES = "sql_safe_updates";
     public static final String NET_BUFFER_LENGTH = "net_buffer_length";
     public static final String HAVE_QUERY_CACHE =  "have_query_cache";
@@ -1129,6 +1152,10 @@ public class SessionVariable implements Serializable, 
Writable {
     @VariableMgr.VarAttr(name = TIME_ZONE, needForward = true, 
affectQueryResult = true)
     public String timeZone = TimeUtils.getSystemTimeZone().getID();
 
+    @VariableMgr.VarAttr(name = LC_TIME_NAMES, needForward = true, 
affectQueryResult = true,
+            setter = "setLcTimeNames")
+    public String lcTimeNames = "en_US";
+
     @VariableMgr.VarAttr(name = PARALLEL_EXCHANGE_INSTANCE_NUM)
     public int exchangeInstanceParallel = 100;
 
@@ -3510,6 +3537,33 @@ public class SessionVariable implements Serializable, 
Writable {
         this.timeZone = timeZone;
     }
 
+    private static String standarlizeLcTimeNames(String value) {
+        if (value.isEmpty()) {
+            throw new InvalidParameterException("lc_time_names value is 
empty");
+        }
+        String[] segments = value.split("_");
+        if (segments.length != 2) {
+            throw new InvalidParameterException(
+                    "lc_time_names value must be in language_COUNTRY form: " + 
value);
+        }
+
+        return segments[0].toLowerCase() + "_" + segments[1].toUpperCase();
+    }
+
+    public void setLcTimeNames(String lcTimeNames) {
+        String standardLcTimeNames = standarlizeLcTimeNames(lcTimeNames);
+        if (!SUPPORTED_LC_TIME_NAMES.contains(standardLcTimeNames)) {
+            String supportedList = String.join(", ", SUPPORTED_LC_TIME_NAMES);
+            throw new InvalidParameterException("Unsupported lc_time_names 
value: " + lcTimeNames
+                + ". Supported values are: " + supportedList);
+        }
+        this.lcTimeNames = standardLcTimeNames;
+    }
+
+    public String getLcTimeNames() {
+        return lcTimeNames;
+    }
+
     public int getSqlSafeUpdates() {
         return sqlSafeUpdates;
     }
diff --git a/gensrc/thrift/PaloInternalService.thrift 
b/gensrc/thrift/PaloInternalService.thrift
index f781af22bf1..415e1b40d95 100644
--- a/gensrc/thrift/PaloInternalService.thrift
+++ b/gensrc/thrift/PaloInternalService.thrift
@@ -489,6 +489,9 @@ struct TQueryGlobals {
   4: optional bool load_zero_tolerance = false
 
   5: optional i32 nano_seconds
+
+  // Locale name used for month/day names formatting, e.g. en_US
+  6: optional string lc_time_names
 }
 
 
diff --git 
a/regression-test/data/doc/sql-manual/sql-functions/doc_date_functions_test.out 
b/regression-test/data/doc/sql-manual/sql-functions/doc_date_functions_test.out
index 7807b4c5e2b..bc33c290641 100644
--- 
a/regression-test/data/doc/sql-manual/sql-functions/doc_date_functions_test.out
+++ 
b/regression-test/data/doc/sql-manual/sql-functions/doc_date_functions_test.out
@@ -227,6 +227,138 @@ Sunday
 -- !dayname_3 --
 \N
 
+-- !dayname_zh_cn --
+星期日
+
+-- !dayname_zh_tw --
+星期五
+
+-- !dayname_zh_hk --
+星期日
+
+-- !dayname_fr_fr --
+vendredi
+
+-- !dayname_fr_be --
+lundi
+
+-- !dayname_fr_ca --
+samedi
+
+-- !dayname_de_de --
+Donnerstag
+
+-- !dayname_de_at --
+Samstag
+
+-- !dayname_de_ch --
+Samstag
+
+-- !dayname_ja_jp --
+土曜日
+
+-- !dayname_ko_kr --
+일요일
+
+-- !dayname_es_es --
+domingo
+
+-- !dayname_es_mx --
+domingo
+
+-- !dayname_es_ar --
+miércoles
+
+-- !dayname_ru_ru --
+четверг
+
+-- !dayname_ru_ua --
+вторник
+
+-- !dayname_it_it --
+sabato
+
+-- !dayname_it_ch --
+mercoledì
+
+-- !dayname_ar_sa --
+الاثنين
+
+-- !dayname_ar_ae --
+الجمعة
+
+-- !dayname_ar_eg --
+السبت
+
+-- !dayname_en_us --
+Monday
+
+-- !dayname_en_gb --
+Sunday
+
+-- !dayname_en_au --
+Thursday
+
+-- !dayname_en_ca --
+Monday
+
+-- !dayname_pt_br --
+quinta-feira
+
+-- !dayname_pt_pt --
+domingo
+
+-- !dayname_nl_nl --
+donderdag
+
+-- !dayname_nl_be --
+donderdag
+
+-- !dayname_sv_se --
+tisdag
+
+-- !dayname_no_no --
+fredag
+
+-- !dayname_da_dk --
+søndag
+
+-- !dayname_fi_fi --
+maanantaina
+
+-- !dayname_pl_pl --
+czwartek
+
+-- !dayname_cs_cz --
+čtvrtek
+
+-- !dayname_hu_hu --
+kedd
+
+-- !dayname_th_th --
+วันอาทิตย์
+
+-- !dayname_vi_vn --
+Thứ Hai
+
+-- !dayname_tr_tr --
+Çarşamba
+
+-- !dayname_el_gr --
+Σάββατο
+
+-- !dayname_he_il --
+יום ראשון
+
+-- !dayname_hi_in --
+गुरुवार
+
+-- !dayname_id_id --
+Selasa
+
+-- !dayname_ms_my --
+Sabtu
+
 -- !dayofweek_1 --
 3
 
@@ -812,6 +944,225 @@ July
 -- !monthname_3 --
 \N
 
+-- !monthname_zh_cn --
+七月
+
+-- !monthname_zh_tw --
+7月
+
+-- !monthname_zh_hk --
+7月
+
+-- !monthname_fr_fr --
+juillet
+
+-- !monthname_fr_be --
+juillet
+
+-- !monthname_fr_ca --
+juillet
+
+-- !monthname_fr_ch --
+juillet
+
+-- !monthname_de_de --
+Juli
+
+-- !monthname_de_at --
+Juli
+
+-- !monthname_de_ch --
+Juli
+
+-- !monthname_ja_jp --
+7月
+
+-- !monthname_ko_kr --
+7월
+
+-- !monthname_es_es --
+julio
+
+-- !monthname_es_mx --
+julio
+
+-- !monthname_es_ar --
+julio
+
+-- !monthname_es_co --
+julio
+
+-- !monthname_it_it --
+luglio
+
+-- !monthname_it_ch --
+luglio
+
+-- !monthname_ru_ru --
+июля
+
+-- !monthname_ru_ua --
+июля
+
+-- !monthname_ar_sa --
+يوليو
+
+-- !monthname_ar_ae --
+يوليو
+
+-- !monthname_ar_eg --
+يوليو
+
+-- !monthname_ar_jo --
+تموز
+
+-- !monthname_en_us --
+July
+
+-- !monthname_en_gb --
+July
+
+-- !monthname_en_au --
+July
+
+-- !monthname_en_ca --
+July
+
+-- !monthname_pt_br --
+julho
+
+-- !monthname_pt_pt --
+julho
+
+-- !monthname_nl_nl --
+juli
+
+-- !monthname_nl_be --
+juli
+
+-- !monthname_sv_se --
+juli
+
+-- !monthname_sv_fi --
+juli
+
+-- !monthname_no_no --
+juli
+
+-- !monthname_nb_no --
+juli
+
+-- !monthname_da_dk --
+juli
+
+-- !monthname_fi_fi --
+heinäkuuta
+
+-- !monthname_pl_pl --
+lipca
+
+-- !monthname_cs_cz --
+července
+
+-- !monthname_sk_sk --
+júla
+
+-- !monthname_hu_hu --
+július
+
+-- !monthname_ro_ro --
+iulie
+
+-- !monthname_bg_bg --
+юли
+
+-- !monthname_hr_hr --
+srpnja
+
+-- !monthname_sl_si --
+julij
+
+-- !monthname_sr_rs --
+јул
+
+-- !monthname_mk_mk --
+јули
+
+-- !monthname_sq_al --
+korrik
+
+-- !monthname_th_th --
+กรกฎาคม
+
+-- !monthname_vi_vn --
+tháng 7
+
+-- !monthname_tr_tr --
+Temmuz
+
+-- !monthname_el_gr --
+Ιουλίου
+
+-- !monthname_he_il --
+יולי
+
+-- !monthname_hi_in --
+जुलाई
+
+-- !monthname_gu_in --
+જુલાઈ
+
+-- !monthname_ta_in --
+ஜூலை
+
+-- !monthname_te_in --
+జులై
+
+-- !monthname_id_id --
+Juli
+
+-- !monthname_ms_my --
+Julai
+
+-- !monthname_lt_lt --
+liepos
+
+-- !monthname_lv_lv --
+jūlijs
+
+-- !monthname_et_ee --
+juuli
+
+-- !monthname_is_is --
+júlí
+
+-- !monthname_fo_fo --
+juli
+
+-- !monthname_be_by --
+ліпеня
+
+-- !monthname_uk_ua --
+липня
+
+-- !monthname_mn_mn --
+долоодугаар сар
+
+-- !monthname_ur_pk --
+جولائی
+
+-- !monthname_ca_es --
+de juliol
+
+-- !monthname_eu_es --
+uztailak
+
+-- !monthname_gl_es --
+xullo
+
+-- !monthname_rm_ch --
+da fanadur
+
 -- !months_add_1 --
 2020-02-29
 
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 23f285ad291..ac0656a15db 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
@@ -265,6 +265,191 @@ suite("doc_date_functions_test") {
     qt_dayname_1 """select dayname('2007-02-03 00:00:00')"""
     qt_dayname_2 """select dayname('2023-10-01')"""
     qt_dayname_3 """select dayname(NULL)"""
+
+    sql """SET lc_time_names='ZH_cn'"""
+    qt_dayname_zh_cn """SELECT DAYNAME('2023-10-01')"""
+    
+    sql """SET lc_time_names='zh_TW'"""
+    qt_dayname_zh_tw """SELECT DAYNAME('2024-03-15 14:30:25')"""
+    
+    sql """SET lc_time_names='zh_HK'"""
+    qt_dayname_zh_hk """SELECT DAYNAME('2022-12-25')"""
+    
+    sql """SET lc_time_names='fr_FR'"""
+    qt_dayname_fr_fr """SELECT DAYNAME('2023-07-14 09:15:30')"""
+    
+    sql """SET lc_time_names='fr_BE'"""
+    qt_dayname_fr_be """SELECT DAYNAME('2024-01-01')"""
+    
+    sql """SET lc_time_names='fr_CA'"""
+    qt_dayname_fr_ca """SELECT DAYNAME('2023-11-11 23:59:59')"""
+    
+    sql """SET lc_time_names='de_DE'"""
+    qt_dayname_de_de """SELECT DAYNAME('2024-02-29')"""
+    
+    sql """SET lc_time_names='DE_at'"""
+    qt_dayname_de_at """SELECT DAYNAME('2023-05-20 06:45:12')"""
+    
+    sql """SET lc_time_names='de_CH'"""
+    qt_dayname_de_ch """SELECT DAYNAME('2024-08-31')"""
+    
+    sql """SET lc_time_names='ja_JP'"""
+    qt_dayname_ja_jp """SELECT DAYNAME('2023-04-29 12:00:00')"""
+    
+    sql """SET lc_time_names='ko_KR'"""
+    qt_dayname_ko_kr """SELECT DAYNAME('2024-09-15')"""
+    
+    sql """SET lc_time_names='ES_es'"""
+    qt_dayname_es_es """SELECT DAYNAME('2023-12-31 18:30:45')"""
+    
+    sql """SET lc_time_names='es_MX'"""
+    qt_dayname_es_mx """SELECT DAYNAME('2024-05-05')"""
+    
+    sql """SET lc_time_names='es_AR'"""
+    qt_dayname_es_ar """SELECT DAYNAME('2023-06-21 03:15:22')"""
+    
+    sql """SET lc_time_names='RU_ru'"""
+    qt_dayname_ru_ru """SELECT DAYNAME('2024-07-04')"""
+    
+    sql """SET lc_time_names='ru_UA'"""
+    qt_dayname_ru_ua """SELECT DAYNAME('2023-02-14 16:45:33')"""
+    
+    sql """SET lc_time_names='it_IT'"""
+    qt_dayname_it_it """SELECT DAYNAME('2024-10-12')"""
+    
+    sql """SET lc_time_names='IT_ch'"""
+    qt_dayname_it_ch """SELECT DAYNAME('2023-03-08 21:20:15')"""
+    
+    sql """SET lc_time_names='ar_SA'"""
+    qt_dayname_ar_sa """SELECT DAYNAME('2024-04-15')"""
+    
+    sql """SET lc_time_names='ar_AE'"""
+    qt_dayname_ar_ae """SELECT DAYNAME('2023-08-25 11:30:40')"""
+    
+    sql """SET lc_time_names='AR_eg'"""
+    qt_dayname_ar_eg """SELECT DAYNAME('2024-01-20')"""
+    
+    sql """SET lc_time_names='en_US'"""
+    qt_dayname_en_us """SELECT DAYNAME('2023-09-11 07:45:55')"""
+    
+    sql """SET lc_time_names='en_GB'"""
+    qt_dayname_en_gb """SELECT DAYNAME('2024-06-30')"""
+    
+    sql """SET lc_time_names='En_Au'"""
+    qt_dayname_en_au """SELECT DAYNAME('2023-01-26 19:25:10')"""
+    
+    sql """SET lc_time_names='en_CA'"""
+    qt_dayname_en_ca """SELECT DAYNAME('2024-11-11')"""
+    
+    sql """SET lc_time_names='pt_BR'"""
+    qt_dayname_pt_br """SELECT DAYNAME('2023-09-07 14:15:28')"""
+    
+    sql """SET lc_time_names='pt_PT'"""
+    qt_dayname_pt_pt """SELECT DAYNAME('2024-12-08')"""
+    
+    sql """SET lc_time_names='nl_NL'"""
+    qt_dayname_nl_nl """SELECT DAYNAME('2023-04-27 10:30:45')"""
+    
+    sql """SET lc_time_names='NL_be'"""
+    qt_dayname_nl_be """SELECT DAYNAME('2024-03-21')"""
+    
+    sql """SET lc_time_names='sv_SE'"""
+    qt_dayname_sv_se """SELECT DAYNAME('2023-06-06 22:15:35')"""
+    
+    sql """SET lc_time_names='no_NO'"""
+    qt_dayname_no_no """SELECT DAYNAME('2024-05-17')"""
+    
+    sql """SET lc_time_names='da_DK'"""
+    qt_dayname_da_dk """SELECT DAYNAME('2023-12-03 08:20:17')"""
+    
+    sql """SET lc_time_names='fi_FI'"""
+    qt_dayname_fi_fi """SELECT DAYNAME('2024-01-15')"""
+    
+    sql """SET lc_time_names='pl_PL'"""
+    qt_dayname_pl_pl """SELECT DAYNAME('2023-11-30 13:45:22')"""
+    
+    sql """SET lc_time_names='cs_CZ'"""
+    qt_dayname_cs_cz """SELECT DAYNAME('2024-06-20')"""
+    
+    sql """SET lc_time_names='hu_HU'"""
+    qt_dayname_hu_hu """SELECT DAYNAME('2023-08-15 20:10:33')"""
+    
+    sql """SET lc_time_names='th_TH'"""
+    qt_dayname_th_th """SELECT DAYNAME('2024-09-22')"""
+    
+    sql """SET lc_time_names='vi_VN'"""
+    qt_dayname_vi_vn """SELECT DAYNAME('2023-05-01 15:35:44')"""
+    
+    sql """SET lc_time_names='tr_TR'"""
+    qt_dayname_tr_tr """SELECT DAYNAME('2024-02-14')"""
+    
+    sql """SET lc_time_names='el_GR'"""
+    qt_dayname_el_gr """SELECT DAYNAME('2023-10-28 04:25:56')"""
+    
+    sql """SET lc_time_names='he_IL'"""
+    qt_dayname_he_il """SELECT DAYNAME('2024-04-07')"""
+    
+    sql """SET lc_time_names='hi_IN'"""
+    qt_dayname_hi_in """SELECT DAYNAME('2023-07-20 17:55:11')"""
+    
+    sql """SET lc_time_names='id_ID'"""
+    qt_dayname_id_id """SELECT DAYNAME('2024-11-05')"""
+    
+    sql """SET lc_time_names='ms_MY'"""
+    qt_dayname_ms_my """SELECT DAYNAME('2023-03-18 12:40:28')"""
+
+    sql """SET lc_time_names='ar_AE'"""
+    testFoldConst("SELECT DAYNAME('2023-08-15 20:10:33');")
+    
+    sql """SET lc_time_names='zh_CN'"""
+    testFoldConst("SELECT DAYNAME('2024-09-22');")
+    
+    sql """SET lc_time_names='ja_JP'"""
+    testFoldConst("SELECT DAYNAME('2023-05-01 15:35:44');")
+    
+    sql """SET lc_time_names='ko_KR'"""
+    testFoldConst("SELECT DAYNAME('2024-02-14');")
+    
+    sql """SET lc_time_names='ru_RU'"""
+    testFoldConst("SELECT DAYNAME('2023-10-28 04:25:56');")
+    
+    sql """SET lc_time_names='de_DE'"""
+    testFoldConst("SELECT DAYNAME('2024-04-07');")
+    
+    sql """SET lc_time_names='fr_FR'"""
+    testFoldConst("SELECT DAYNAME('2023-07-20 17:55:11');")
+    
+    sql """SET lc_time_names='es_ES'"""
+    testFoldConst("SELECT DAYNAME('2024-11-05');")
+    
+    sql """SET lc_time_names='pt_BR'"""
+    testFoldConst("SELECT DAYNAME('2023-03-18 12:40:28');")
+    
+    sql """SET lc_time_names='it_IT'"""
+    testFoldConst("SELECT DAYNAME('2024-01-01');")
+    
+    sql """SET lc_time_names='nl_NL'"""
+    testFoldConst("SELECT DAYNAME('2023-12-31');")
+    
+    sql """SET lc_time_names='sv_SE'"""
+    testFoldConst("SELECT DAYNAME('2024-06-30 23:59:59');")
+    
+    sql """SET lc_time_names='pl_PL'"""
+    testFoldConst("SELECT DAYNAME('2023-02-28');")
+    
+    sql """SET lc_time_names='cs_CZ'"""
+    testFoldConst("SELECT DAYNAME('2024-02-29');")
+    
+    sql """SET lc_time_names='bg_BG'"""
+    testFoldConst("SELECT DAYNAME('1970-01-01');")
+    
+    sql """SET lc_time_names='uk_UA'"""
+    testFoldConst("SELECT DAYNAME('2038-01-19');")
+    
+    sql """SET lc_time_names='en_US'"""
+    testFoldConst("SELECT DAYNAME(NULL);")
+
+    sql """SET lc_time_names=default"""
     
     // 17. DAYOFWEEK function tests
     qt_dayofweek_1 """select dayofweek('2019-06-25')"""
@@ -543,6 +728,275 @@ suite("doc_date_functions_test") {
     qt_monthname_2 """SELECT MONTHNAME('2023-07-13 22:28:18')"""
     qt_monthname_3 """SELECT MONTHNAME(NULL)"""
     
+    sql """SET lc_time_names='zh_CN'"""
+    qt_monthname_zh_cn """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='zh_TW'"""
+    qt_monthname_zh_tw """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='zh_HK'"""
+    qt_monthname_zh_hk """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='FR_fr'"""
+    qt_monthname_fr_fr """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='fr_BE'"""
+    qt_monthname_fr_be """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='fr_CA'"""
+    qt_monthname_fr_ca """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='fr_CH'"""
+    qt_monthname_fr_ch """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='de_DE'"""
+    qt_monthname_de_de """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='de_AT'"""
+    qt_monthname_de_at """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='DE_ch'"""
+    qt_monthname_de_ch """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='JA_jp'"""
+    qt_monthname_ja_jp """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='Ko_KR'"""
+    qt_monthname_ko_kr """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='es_ES'"""
+    qt_monthname_es_es """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='es_MX'"""
+    qt_monthname_es_mx """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='Es_Ar'"""
+    qt_monthname_es_ar """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='es_CO'"""
+    qt_monthname_es_co """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='IT_it'"""
+    qt_monthname_it_it """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='it_CH'"""
+    qt_monthname_it_ch """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ru_RU'"""
+    qt_monthname_ru_ru """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='RU_ua'"""
+    qt_monthname_ru_ua """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ar_SA'"""
+    qt_monthname_ar_sa """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ar_AE'"""
+    qt_monthname_ar_ae """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='AR_eg'"""
+    qt_monthname_ar_eg """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ar_JO'"""
+    qt_monthname_ar_jo """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='en_US'"""
+    qt_monthname_en_us """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='en_GB'"""
+    qt_monthname_en_gb """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='En_Au'"""
+    qt_monthname_en_au """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='en_CA'"""
+    qt_monthname_en_ca """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='pt_BR'"""
+    qt_monthname_pt_br """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='pt_PT'"""
+    qt_monthname_pt_pt """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='nl_NL'"""
+    qt_monthname_nl_nl """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='NL_be'"""
+    qt_monthname_nl_be """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='sv_SE'"""
+    qt_monthname_sv_se """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='sv_FI'"""
+    qt_monthname_sv_fi """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='no_NO'"""
+    qt_monthname_no_no """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='nb_NO'"""
+    qt_monthname_nb_no """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='da_DK'"""
+    qt_monthname_da_dk """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='fi_FI'"""
+    qt_monthname_fi_fi """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='pl_PL'"""
+    qt_monthname_pl_pl """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='cs_CZ'"""
+    qt_monthname_cs_cz """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='sk_SK'"""
+    qt_monthname_sk_sk """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='hu_HU'"""
+    qt_monthname_hu_hu """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ro_RO'"""
+    qt_monthname_ro_ro """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='bg_BG'"""
+    qt_monthname_bg_bg """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='hr_HR'"""
+    qt_monthname_hr_hr """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='sl_SI'"""
+    qt_monthname_sl_si """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='sr_RS'"""
+    qt_monthname_sr_rs """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='mk_MK'"""
+    qt_monthname_mk_mk """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='sq_AL'"""
+    qt_monthname_sq_al """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='th_TH'"""
+    qt_monthname_th_th """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='vi_VN'"""
+    qt_monthname_vi_vn """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='tr_TR'"""
+    qt_monthname_tr_tr """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='el_GR'"""
+    qt_monthname_el_gr """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='he_IL'"""
+    qt_monthname_he_il """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='hi_IN'"""
+    qt_monthname_hi_in """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='gu_IN'"""
+    qt_monthname_gu_in """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ta_IN'"""
+    qt_monthname_ta_in """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='te_IN'"""
+    qt_monthname_te_in """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='id_ID'"""
+    qt_monthname_id_id """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ms_MY'"""
+    qt_monthname_ms_my """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='lt_LT'"""
+    qt_monthname_lt_lt """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='lv_LV'"""
+    qt_monthname_lv_lv """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='et_EE'"""
+    qt_monthname_et_ee """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='is_IS'"""
+    qt_monthname_is_is """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='fo_FO'"""
+    qt_monthname_fo_fo """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='be_BY'"""
+    qt_monthname_be_by """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='uk_UA'"""
+    qt_monthname_uk_ua """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='mn_MN'"""
+    qt_monthname_mn_mn """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ur_PK'"""
+    qt_monthname_ur_pk """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ca_ES'"""
+    qt_monthname_ca_es """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='eu_ES'"""
+    qt_monthname_eu_es """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='gl_ES'"""
+    qt_monthname_gl_es """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='rm_CH'"""
+    qt_monthname_rm_ch """SELECT MONTHNAME('2023-07-13')"""
+    
+    sql """SET lc_time_names='ar_AE'"""
+    testFoldConst("SELECT MONTHNAME('2023-01-15');")
+    
+    sql """SET lc_time_names='zh_CN'"""
+    testFoldConst("SELECT MONTHNAME('2023-02-20');")
+    
+    sql """SET lc_time_names='ja_JP'"""
+    testFoldConst("SELECT MONTHNAME('2023-03-25');")
+    
+    sql """SET lc_time_names='ko_KR'"""
+    testFoldConst("SELECT MONTHNAME('2023-04-10');")
+    
+    sql """SET lc_time_names='ru_RU'"""
+    testFoldConst("SELECT MONTHNAME('2023-05-18');")
+    
+    sql """SET lc_time_names='de_DE'"""
+    testFoldConst("SELECT MONTHNAME('2023-06-22');")
+    
+    sql """SET lc_time_names='fr_FR'"""
+    testFoldConst("SELECT MONTHNAME('2023-07-13');")
+    
+    sql """SET lc_time_names='es_ES'"""
+    testFoldConst("SELECT MONTHNAME('2023-08-05');")
+    
+    sql """SET lc_time_names='pt_BR'"""
+    testFoldConst("SELECT MONTHNAME('2023-09-30');")
+    
+    sql """SET lc_time_names='it_IT'"""
+    testFoldConst("SELECT MONTHNAME('2023-10-12');")
+    
+    sql """SET lc_time_names='nl_NL'"""
+    testFoldConst("SELECT MONTHNAME('2023-11-28');")
+    
+    sql """SET lc_time_names='sv_SE'"""
+    testFoldConst("SELECT MONTHNAME('2023-12-01');")
+    
+    sql """SET lc_time_names='pl_PL'"""
+    testFoldConst("SELECT MONTHNAME('2024-01-31');")
+    
+    sql """SET lc_time_names='cs_CZ'"""
+    testFoldConst("SELECT MONTHNAME('2024-02-29');")
+    
+    sql """SET lc_time_names='bg_BG'"""
+    testFoldConst("SELECT MONTHNAME('2024-03-15');")
+    
+    sql """SET lc_time_names='uk_UA'"""
+    testFoldConst("SELECT MONTHNAME('2024-04-01');")
+
+    sql """SET lc_time_names=default"""
+    
     // 54. MONTHS_ADD function tests
     qt_months_add_1 """SELECT MONTHS_ADD('2020-01-31', 1)"""
     qt_months_add_2 """SELECT MONTHS_ADD('2020-01-31 02:02:02', 1)"""


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to