fix to_char for evaluate iso week and format 'tme' issue
This commit is contained in:
@ -1032,7 +1032,7 @@ int ObExprToCharCommon::convert_to_ob_time(ObEvalCtx &ctx,
|
||||
break;
|
||||
}
|
||||
case ObMySQLDateTC: {
|
||||
ret = ObTimeConverter::mdate_to_ob_time(input.get_mysql_date(), ob_time);
|
||||
ret = ObTimeConverter::mdate_to_ob_time<true>(input.get_mysql_date(), ob_time);
|
||||
break;
|
||||
}
|
||||
case ObOTimestampTC: {
|
||||
@ -1050,7 +1050,7 @@ int ObExprToCharCommon::convert_to_ob_time(ObEvalCtx &ctx,
|
||||
break;
|
||||
}
|
||||
case ObMySQLDateTimeTC: {
|
||||
ret = ObTimeConverter::mdatetime_to_ob_time(input.get_mysql_datetime(), ob_time);
|
||||
ret = ObTimeConverter::mdatetime_to_ob_time<true>(input.get_mysql_datetime(), ob_time);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
||||
@ -1893,6 +1893,16 @@ int ObNFMToChar::process_tm_format(const ObNFMObj &nfm_obj, const int64_t in_sca
|
||||
MEMCPY(buf, num_str_buf, num_str_len);
|
||||
pos += num_str_len;
|
||||
} else if (num_str_len > 64) {
|
||||
if (lib::is_mysql_mode()) {
|
||||
// remove '0' before '.'
|
||||
if (num_str_len > 2 && 0 == MEMCMP(num_str_buf, "0.", 2)) {
|
||||
MEMMOVE(num_str_buf, num_str_buf + 1, num_str_len - 1);
|
||||
num_str_len -= 1;
|
||||
} else if (num_str_len > 3 && 0 == MEMCMP(num_str_buf, "-0.", 3)) {
|
||||
MEMMOVE(num_str_buf + 1, num_str_buf + 2, num_str_len - 2);
|
||||
num_str_len -= 1;
|
||||
}
|
||||
}
|
||||
if (OB_FAIL(num_str_to_sci(num_str, out_scale, buf, buf_len, pos, true))) {
|
||||
LOG_WARN("failed to convert num to sci str", K(ret));
|
||||
}
|
||||
@ -1944,6 +1954,16 @@ int ObNFMToChar::process_tme_format(const ObNFMObj &nfm_obj, const int64_t in_sc
|
||||
LOG_WARN("invalid obj type", K(ret), K(obj_type));
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
if (lib::is_mysql_mode()) {
|
||||
// remove '0' before '.'
|
||||
if (num_str_len > 2 && 0 == MEMCMP(num_str_buf, "0.", 2)) {
|
||||
MEMMOVE(num_str_buf, num_str_buf + 1, num_str_len - 1);
|
||||
num_str_len -= 1;
|
||||
} else if (num_str_len > 3 && 0 == MEMCMP(num_str_buf, "-0.", 3)) {
|
||||
MEMMOVE(num_str_buf + 1, num_str_buf + 2, num_str_len - 2);
|
||||
num_str_len -= 1;
|
||||
}
|
||||
}
|
||||
num_str.assign_ptr(num_str_buf, static_cast<int32_t>(num_str_len));
|
||||
LOG_DEBUG("process_tme_format", K(ret), K(num_str_buf), K(num_str_len));
|
||||
if (OB_FAIL(num_str_to_sci(num_str, out_scale, buf, buf_len, pos, true))) {
|
||||
|
||||
Reference in New Issue
Block a user