mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
07e4853c23
MDEV-17625 Different warnings when comparing a garbage to DATETIME vs TIME - Splitting processes of data type conversion (to TIME/DATE,DATETIME) and warning generation. Warning are now only get collected during conversion (in an "int" variable), and are pushed in the very end of conversion (not in parallel). Warnings generated by the low level routines str_to_xxx() and number_to_xxx() can now be changed at the end, when TIME_FUZZY_DATES is applied, from "Invalid value" to "Truncated invalid value". Now "Illegal value" is issued only when the low level routine returned an error and TIME_FUZZY_DATES was not set. Otherwise, if the low level routine returned "false" (success), or if NULL was converted to a zero datetime by TIME_FUZZY_DATES, then "Truncated illegal value" is issued. This gives better warnings. - Methods Type_handler::Item_get_date() and Type_handler::Item_func_hybrid_field_type_get_date() now only convert and collect warning information, but do not push warnings. - Changing the return data type for Type_handler::Item_get_date() and Type_handler::Item_func_hybrid_field_type_get_date() from "bool" to "void". The conversion result (success vs error) can be checked by testing ltime->time_type. MYSQL_TIME_{NONE|ERROR} mean mean error, other values mean success. - Adding new wrapper methods Type_handler::Item_get_date_with_warn() and Type_handler::Item_func_hybrid_field_type_get_date_with_warn() to do conversion followed by raising warnings, and changing the code to call new Type_handler::***_with_warn() methods. - Adding a helper class Temporal::Status, a wrapper for MYSQL_TIME_STATUS with automatic initialization. - Adding a helper class Temporal::Warn, to collect warnings but without actually raising them. Moving a part of ErrConv into a separate class ErrBuff, and deriving both Temporal::Warn and ErrConv from ErrBuff. The ErrBuff part of Temporal::Warn is used to collect textual representation of the input data. - Adding a helper class Temporal::Warn_push. It's used to collect warning information during conversion, and automatically pushes warnings to the diagnostics area on its destructor time (in case of non-zero warning). - Moving more code from various functions inside class Temporal. - Adding more Temporal_hybrid constructors and protected Temporal methods make_from_xxx(), which convert and only collect warning information, but do not actually raise warnings. - Now the low level functions str_to_datetime() and str_to_time() always set status->warning if the return value is "true" (error). - Now the low level functions number_to_time() and number_to_datetime() set the "*was_cut" argument if the return value is "true" (error). - Adding a few DBUG_ASSERTs to make sure that str_to_xxx() and number_to_xxx() always set warnings on error. - Adding new warning flags MYSQL_TIME_WARN_EDOM and MYSQL_TIME_WARN_ZERO_DATE for the code symmetry. Before this change there was a special code path for (rc==true && was_cut==0) which was treated by Field_temporal::store_invalid_with_warning as "zero date violation". Now was_cut==0 always means that there are no any error/warnings/notes to be raised, not matter what rc is. - Using new Temporal_hybrid constructors in combination with Temporal::Warn_push inside str_to_datetime_with_warn(), double_to_datetime_with_warn(), int_to_datetime_with_warn(), Field::get_date(), Item::get_date_from_string(), and a few other places. - Removing methods Dec_ptr::to_datetime_with_warn(), Year::to_time_with_warn(), my_decimal::to_datetime_with_warn(), Dec_ptr::to_datetime_with_warn(). Fixing Sec6::to_time() and Sec6::to_datetime() to convert and only collect warnings, without raising warnings. Now warning raising functionality resides in Temporal::Warn_push. - Adding classes Longlong_hybrid_null and Double_null, to return both value and the "IS NULL" flag. Adding methods Item::to_double_null(), to_longlong_hybrid_null(), Item_func_hybrid_field_type::to_longlong_hybrid_null_op(), Item_func_hybrid_field_type::to_double_null_op(). Removing separate classes VInt and VInt_op, as they have been replaced by a single class Longlong_hybrid_null. - Adding a helper method Temporal::type_name_by_timestamp_type(), moving a part of make_truncated_value_warning() into it, and reusing in Temporal::Warn::push_conversion_warnings(). - Removing Item::make_zero_date() and Item_func_hybrid_field_type::make_zero_mysql_time(). They provided duplicate functionality. Now this code resides in Temporal::make_fuzzy_date(). The latter is now called for all Item types when data type conversion (to DATE/TIME/DATETIME) is involved, including Item_field and Item_direct_view_ref. This fixes MDEV-17563: Item_direct_view_ref now correctly converts NULL to a zero date when TIME_FUZZY_DATES says so.
575 lines
25 KiB
Text
575 lines
25 KiB
Text
drop table if exists t1;
|
||
SELECT variable_name, variable_value
|
||
FROM information_schema.global_variables
|
||
WHERE variable_name IN ('date_format', 'datetime_format', 'time_format')
|
||
ORDER BY variable_name;
|
||
variable_name variable_value
|
||
DATETIME_FORMAT %Y-%m-%d %H:%i:%s
|
||
DATE_FORMAT %d.%m.%Y
|
||
TIME_FORMAT %H.%i.%s
|
||
SELECT variable_name, variable_value
|
||
FROM information_schema.session_variables
|
||
WHERE variable_name IN ('date_format', 'datetime_format', 'time_format')
|
||
ORDER BY variable_name;
|
||
variable_name variable_value
|
||
DATETIME_FORMAT %Y-%m-%d %H:%i:%s
|
||
DATE_FORMAT %d.%m.%Y
|
||
TIME_FORMAT %H.%i.%s
|
||
select str_to_date(concat('15-01-2001',' 2:59:58.999'),
|
||
concat('%d-%m-%Y',' ','%H:%i:%s.%f'));
|
||
str_to_date(concat('15-01-2001',' 2:59:58.999'),
|
||
concat('%d-%m-%Y',' ','%H:%i:%s.%f'))
|
||
2001-01-15 02:59:58.999000
|
||
select STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T');
|
||
STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T')
|
||
NULL
|
||
Warnings:
|
||
Warning 1411 Incorrect time value: '22.30.61' for function str_to_date
|
||
create table t1 (date char(30), format char(30) not null);
|
||
insert into t1 values
|
||
('2003-01-02 10:11:12', '%Y-%m-%d %H:%i:%S'),
|
||
('03-01-02 8:11:2.123456', '%y-%m-%d %H:%i:%S.%#'),
|
||
('0003-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'),
|
||
('03-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'),
|
||
('2003-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'),
|
||
('2003-01-02 01:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f%p'),
|
||
('2003-01-02 02:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f %p'),
|
||
('2003-01-02 12:11:12.12345 am', '%Y-%m-%d %h:%i:%S.%f%p'),
|
||
('2003-01-02 11:11:12Pm', '%Y-%m-%d %h:%i:%S%p'),
|
||
('10:20:10', '%H:%i:%s'),
|
||
('10:20:10', '%h:%i:%s.%f'),
|
||
('10:20:10', '%T'),
|
||
('10:20:10AM', '%h:%i:%s%p'),
|
||
('10:20:10AM', '%r'),
|
||
('10:20:10.44AM', '%h:%i:%s.%f%p'),
|
||
('15-01-2001 12:59:58', '%d-%m-%Y %H:%i:%S'),
|
||
('15 September 2001', '%d %M %Y'),
|
||
('15 SEPTEMB 2001', '%d %M %Y'),
|
||
('15 MAY 2001', '%d %b %Y'),
|
||
('15th May 2001', '%D %b %Y'),
|
||
('Sunday 15 MAY 2001', '%W %d %b %Y'),
|
||
('Sund 15 MAY 2001', '%W %d %b %Y'),
|
||
('Tuesday 00 2002', '%W %U %Y'),
|
||
('Thursday 53 1998', '%W %u %Y'),
|
||
('Sunday 01 2001', '%W %v %x'),
|
||
('Tuesday 52 2001', '%W %V %X'),
|
||
('060 2004', '%j %Y'),
|
||
('4 53 1998', '%w %u %Y'),
|
||
('15-01-2001', '%d-%m-%Y %H:%i:%S'),
|
||
('15-01-20', '%d-%m-%y'),
|
||
('15-2001-1', '%d-%Y-%c');
|
||
select date,format,str_to_date(date, format) as str_to_date from t1;
|
||
date format str_to_date
|
||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12.000000
|
||
03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000
|
||
0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02.000000
|
||
03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000
|
||
2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 01:11:12.123450
|
||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12.123450
|
||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12.123450
|
||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12.000000
|
||
10:20:10 %H:%i:%s 0000-00-00 10:20:10.000000
|
||
10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10.000000
|
||
10:20:10 %T 0000-00-00 10:20:10.000000
|
||
10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10.000000
|
||
10:20:10AM %r 0000-00-00 10:20:10.000000
|
||
10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10.440000
|
||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58.000000
|
||
15 September 2001 %d %M %Y 2001-09-15 00:00:00.000000
|
||
15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00.000000
|
||
15 MAY 2001 %d %b %Y 2001-05-15 00:00:00.000000
|
||
15th May 2001 %D %b %Y 2001-05-15 00:00:00.000000
|
||
Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000
|
||
Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000
|
||
Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00.000000
|
||
Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00.000000
|
||
Sunday 01 2001 %W %v %x 2001-01-07 00:00:00.000000
|
||
Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00.000000
|
||
060 2004 %j %Y 2004-02-29 00:00:00.000000
|
||
4 53 1998 %w %u %Y 1998-12-31 00:00:00.000000
|
||
15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00.000000
|
||
15-01-20 %d-%m-%y 2020-01-15 00:00:00.000000
|
||
15-2001-1 %d-%Y-%c 2001-01-15 00:00:00.000000
|
||
select date,format,concat('',str_to_date(date, format)) as con from t1;
|
||
date format con
|
||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12.000000
|
||
03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000
|
||
0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02.000000
|
||
03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000
|
||
2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 01:11:12.123450
|
||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12.123450
|
||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12.123450
|
||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12.000000
|
||
10:20:10 %H:%i:%s 0000-00-00 10:20:10.000000
|
||
10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10.000000
|
||
10:20:10 %T 0000-00-00 10:20:10.000000
|
||
10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10.000000
|
||
10:20:10AM %r 0000-00-00 10:20:10.000000
|
||
10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10.440000
|
||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58.000000
|
||
15 September 2001 %d %M %Y 2001-09-15 00:00:00.000000
|
||
15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00.000000
|
||
15 MAY 2001 %d %b %Y 2001-05-15 00:00:00.000000
|
||
15th May 2001 %D %b %Y 2001-05-15 00:00:00.000000
|
||
Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000
|
||
Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000
|
||
Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00.000000
|
||
Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00.000000
|
||
Sunday 01 2001 %W %v %x 2001-01-07 00:00:00.000000
|
||
Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00.000000
|
||
060 2004 %j %Y 2004-02-29 00:00:00.000000
|
||
4 53 1998 %w %u %Y 1998-12-31 00:00:00.000000
|
||
15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00.000000
|
||
15-01-20 %d-%m-%y 2020-01-15 00:00:00.000000
|
||
15-2001-1 %d-%Y-%c 2001-01-15 00:00:00.000000
|
||
select date,format,cast(str_to_date(date, format) as datetime) as datetime from t1;
|
||
date format datetime
|
||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12
|
||
03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02
|
||
0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02 08:11:02
|
||
03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12
|
||
2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 01:11:12
|
||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12
|
||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12
|
||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12
|
||
10:20:10 %H:%i:%s 0000-00-00 10:20:10
|
||
10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10
|
||
10:20:10 %T 0000-00-00 10:20:10
|
||
10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10
|
||
10:20:10AM %r 0000-00-00 10:20:10
|
||
10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10
|
||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58
|
||
15 September 2001 %d %M %Y 2001-09-15 00:00:00
|
||
15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00
|
||
15 MAY 2001 %d %b %Y 2001-05-15 00:00:00
|
||
15th May 2001 %D %b %Y 2001-05-15 00:00:00
|
||
Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00
|
||
Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00
|
||
Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00
|
||
Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00
|
||
Sunday 01 2001 %W %v %x 2001-01-07 00:00:00
|
||
Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00
|
||
060 2004 %j %Y 2004-02-29 00:00:00
|
||
4 53 1998 %w %u %Y 1998-12-31 00:00:00
|
||
15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00
|
||
15-01-20 %d-%m-%y 2020-01-15 00:00:00
|
||
15-2001-1 %d-%Y-%c 2001-01-15 00:00:00
|
||
select date,format,DATE(str_to_date(date, format)) as date2 from t1;
|
||
date format date2
|
||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02
|
||
03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02
|
||
0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 0003-01-02
|
||
03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02
|
||
2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 2003-01-02
|
||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02
|
||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02
|
||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02
|
||
10:20:10 %H:%i:%s 0000-00-00
|
||
10:20:10 %h:%i:%s.%f 0000-00-00
|
||
10:20:10 %T 0000-00-00
|
||
10:20:10AM %h:%i:%s%p 0000-00-00
|
||
10:20:10AM %r 0000-00-00
|
||
10:20:10.44AM %h:%i:%s.%f%p 0000-00-00
|
||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15
|
||
15 September 2001 %d %M %Y 2001-09-15
|
||
15 SEPTEMB 2001 %d %M %Y 2001-09-15
|
||
15 MAY 2001 %d %b %Y 2001-05-15
|
||
15th May 2001 %D %b %Y 2001-05-15
|
||
Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15
|
||
Sund 15 MAY 2001 %W %d %b %Y 2001-05-15
|
||
Tuesday 00 2002 %W %U %Y 2002-01-01
|
||
Thursday 53 1998 %W %u %Y 1998-12-31
|
||
Sunday 01 2001 %W %v %x 2001-01-07
|
||
Tuesday 52 2001 %W %V %X 2002-01-01
|
||
060 2004 %j %Y 2004-02-29
|
||
4 53 1998 %w %u %Y 1998-12-31
|
||
15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15
|
||
15-01-20 %d-%m-%y 2020-01-15
|
||
15-2001-1 %d-%Y-%c 2001-01-15
|
||
select date,format,TIME(str_to_date(date, format)) as time from t1;
|
||
date format time
|
||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 10:11:12.000000
|
||
03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 08:11:02.000000
|
||
0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 08:11:02.000000
|
||
03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 08:11:02.000000
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 22:11:12.000000
|
||
2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 01:11:12.123450
|
||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 02:11:12.123450
|
||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 00:11:12.123450
|
||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12.000000
|
||
10:20:10 %H:%i:%s 10:20:10.000000
|
||
10:20:10 %h:%i:%s.%f 10:20:10.000000
|
||
10:20:10 %T 10:20:10.000000
|
||
10:20:10AM %h:%i:%s%p 10:20:10.000000
|
||
10:20:10AM %r 10:20:10.000000
|
||
10:20:10.44AM %h:%i:%s.%f%p 10:20:10.440000
|
||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58.000000
|
||
15 September 2001 %d %M %Y 00:00:00.000000
|
||
15 SEPTEMB 2001 %d %M %Y 00:00:00.000000
|
||
15 MAY 2001 %d %b %Y 00:00:00.000000
|
||
15th May 2001 %D %b %Y 00:00:00.000000
|
||
Sunday 15 MAY 2001 %W %d %b %Y 00:00:00.000000
|
||
Sund 15 MAY 2001 %W %d %b %Y 00:00:00.000000
|
||
Tuesday 00 2002 %W %U %Y 00:00:00.000000
|
||
Thursday 53 1998 %W %u %Y 00:00:00.000000
|
||
Sunday 01 2001 %W %v %x 00:00:00.000000
|
||
Tuesday 52 2001 %W %V %X 00:00:00.000000
|
||
060 2004 %j %Y 00:00:00.000000
|
||
4 53 1998 %w %u %Y 00:00:00.000000
|
||
15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00.000000
|
||
15-01-20 %d-%m-%y 00:00:00.000000
|
||
15-2001-1 %d-%Y-%c 00:00:00.000000
|
||
select date,format,concat(TIME(str_to_date(date, format))) as time2 from t1;
|
||
date format time2
|
||
2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 10:11:12.000000
|
||
03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 08:11:02.000000
|
||
0003-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 08:11:02.000000
|
||
03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 08:11:02.000000
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 22:11:12.000000
|
||
2003-01-02 01:11:12.12345AM %Y-%m-%d %h:%i:%S.%f%p 01:11:12.123450
|
||
2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 02:11:12.123450
|
||
2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 00:11:12.123450
|
||
2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12.000000
|
||
10:20:10 %H:%i:%s 10:20:10.000000
|
||
10:20:10 %h:%i:%s.%f 10:20:10.000000
|
||
10:20:10 %T 10:20:10.000000
|
||
10:20:10AM %h:%i:%s%p 10:20:10.000000
|
||
10:20:10AM %r 10:20:10.000000
|
||
10:20:10.44AM %h:%i:%s.%f%p 10:20:10.440000
|
||
15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58.000000
|
||
15 September 2001 %d %M %Y 00:00:00.000000
|
||
15 SEPTEMB 2001 %d %M %Y 00:00:00.000000
|
||
15 MAY 2001 %d %b %Y 00:00:00.000000
|
||
15th May 2001 %D %b %Y 00:00:00.000000
|
||
Sunday 15 MAY 2001 %W %d %b %Y 00:00:00.000000
|
||
Sund 15 MAY 2001 %W %d %b %Y 00:00:00.000000
|
||
Tuesday 00 2002 %W %U %Y 00:00:00.000000
|
||
Thursday 53 1998 %W %u %Y 00:00:00.000000
|
||
Sunday 01 2001 %W %v %x 00:00:00.000000
|
||
Tuesday 52 2001 %W %V %X 00:00:00.000000
|
||
060 2004 %j %Y 00:00:00.000000
|
||
4 53 1998 %w %u %Y 00:00:00.000000
|
||
15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00.000000
|
||
15-01-20 %d-%m-%y 00:00:00.000000
|
||
15-2001-1 %d-%Y-%c 00:00:00.000000
|
||
select concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d'));
|
||
concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d'))
|
||
2003-01-02 08:11:02.123456
|
||
truncate table t1;
|
||
insert into t1 values
|
||
('2003-01-02 10:11:12 PM', '%Y-%m-%d %H:%i:%S %p'),
|
||
('2003-01-02 10:11:12.123456', '%Y-%m-%d %h:%i:%S %p'),
|
||
('2003-01-02 10:11:12AM', '%Y-%m-%d %h:%i:%S.%f %p'),
|
||
('2003-01-02 10:11:12AN', '%Y-%m-%d %h:%i:%S%p'),
|
||
('2003-01-02 10:11:12 PM', '%y-%m-%d %H:%i:%S %p'),
|
||
('10:20:10AM', '%H:%i:%s%p'),
|
||
('15 Septembei 2001', '%d %M %Y'),
|
||
('15 Ju 2001', '%d %M %Y'),
|
||
('Sund 15 MA', '%W %d %b %Y'),
|
||
('Thursdai 12 1998', '%W %u %Y'),
|
||
('Sunday 01 2001', '%W %v %X'),
|
||
('Tuesday 52 2001', '%W %V %x'),
|
||
('Tuesday 52 2001', '%W %V %Y'),
|
||
('Tuesday 52 2001', '%W %u %x'),
|
||
('7 53 1998', '%w %u %Y'),
|
||
(NULL, get_format(DATE,'USA'));
|
||
select date,format,str_to_date(date, format) as str_to_date from t1;
|
||
date format str_to_date
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %H:%i:%S %p NULL
|
||
2003-01-02 10:11:12.123456 %Y-%m-%d %h:%i:%S %p NULL
|
||
2003-01-02 10:11:12AM %Y-%m-%d %h:%i:%S.%f %p NULL
|
||
2003-01-02 10:11:12AN %Y-%m-%d %h:%i:%S%p NULL
|
||
2003-01-02 10:11:12 PM %y-%m-%d %H:%i:%S %p NULL
|
||
10:20:10AM %H:%i:%s%p NULL
|
||
15 Septembei 2001 %d %M %Y NULL
|
||
15 Ju 2001 %d %M %Y NULL
|
||
Sund 15 MA %W %d %b %Y NULL
|
||
Thursdai 12 1998 %W %u %Y NULL
|
||
Sunday 01 2001 %W %v %X NULL
|
||
Tuesday 52 2001 %W %V %x NULL
|
||
Tuesday 52 2001 %W %V %Y NULL
|
||
Tuesday 52 2001 %W %u %x NULL
|
||
7 53 1998 %w %u %Y NULL
|
||
NULL %m.%d.%Y NULL
|
||
Warnings:
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '10:20:10AM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '7 53 1998' for function str_to_date
|
||
select date,format,concat(str_to_date(date, format),'') as con from t1;
|
||
date format con
|
||
2003-01-02 10:11:12 PM %Y-%m-%d %H:%i:%S %p NULL
|
||
2003-01-02 10:11:12.123456 %Y-%m-%d %h:%i:%S %p NULL
|
||
2003-01-02 10:11:12AM %Y-%m-%d %h:%i:%S.%f %p NULL
|
||
2003-01-02 10:11:12AN %Y-%m-%d %h:%i:%S%p NULL
|
||
2003-01-02 10:11:12 PM %y-%m-%d %H:%i:%S %p NULL
|
||
10:20:10AM %H:%i:%s%p NULL
|
||
15 Septembei 2001 %d %M %Y NULL
|
||
15 Ju 2001 %d %M %Y NULL
|
||
Sund 15 MA %W %d %b %Y NULL
|
||
Thursdai 12 1998 %W %u %Y NULL
|
||
Sunday 01 2001 %W %v %X NULL
|
||
Tuesday 52 2001 %W %V %x NULL
|
||
Tuesday 52 2001 %W %V %Y NULL
|
||
Tuesday 52 2001 %W %u %x NULL
|
||
7 53 1998 %w %u %Y NULL
|
||
NULL %m.%d.%Y NULL
|
||
Warnings:
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '10:20:10AM' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date
|
||
Warning 1411 Incorrect datetime value: '7 53 1998' for function str_to_date
|
||
truncate table t1;
|
||
insert into t1 values
|
||
('10:20:10AM', '%h:%i:%s'),
|
||
('2003-01-02 10:11:12', '%Y-%m-%d %h:%i:%S'),
|
||
('03-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p');
|
||
select date,format,str_to_date(date, format) as str_to_date from t1;
|
||
date format str_to_date
|
||
10:20:10AM %h:%i:%s 0000-00-00 10:20:10.000000
|
||
2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12.000000
|
||
03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000
|
||
Warnings:
|
||
Warning 1292 Truncated incorrect datetime value: '10:20:10AM'
|
||
select date,format,concat(str_to_date(date, format),'') as con from t1;
|
||
date format con
|
||
10:20:10AM %h:%i:%s 0000-00-00 10:20:10.000000
|
||
2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12.000000
|
||
03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000
|
||
Warnings:
|
||
Warning 1292 Truncated incorrect datetime value: '10:20:10AM'
|
||
drop table t1;
|
||
select get_format(DATE, 'USA') as a;
|
||
a
|
||
%m.%d.%Y
|
||
select get_format(TIME, 'internal') as a;
|
||
a
|
||
%H%i%s
|
||
select get_format(DATETIME, 'eur') as a;
|
||
a
|
||
%Y-%m-%d %H.%i.%s
|
||
select get_format(TIMESTAMP, 'eur') as a;
|
||
a
|
||
%Y-%m-%d %H.%i.%s
|
||
select get_format(DATE, 'TEST') as a;
|
||
a
|
||
NULL
|
||
select str_to_date('15-01-2001 12:59:59', GET_FORMAT(DATE,'USA'));
|
||
str_to_date('15-01-2001 12:59:59', GET_FORMAT(DATE,'USA'))
|
||
NULL
|
||
Warnings:
|
||
Warning 1411 Incorrect datetime value: '15-01-2001 12:59:59' for function str_to_date
|
||
explain extended select makedate(1997,1), addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM"),cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME), maketime(23,11,12),microsecond("1997-12-31 23:59:59.000001");
|
||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||
Warnings:
|
||
Note 1003 select makedate(1997,1) AS `makedate(1997,1)`,addtime('31.12.97 11.59.59.999999 PM','1 1.1.1.000002') AS `addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,subtime('31.12.97 11.59.59.999999 PM','1 1.1.1.000002') AS `subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,timediff('01.01.97 11:59:59.000001 PM','31.12.95 11:59:59.000002 PM') AS `timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM")`,cast(str_to_date('15-01-2001 12:59:59','%d-%m-%Y %H:%i:%S') as time) AS `cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME)`,maketime(23,11,12) AS `maketime(23,11,12)`,microsecond('1997-12-31 23:59:59.000001') AS `microsecond("1997-12-31 23:59:59.000001")`
|
||
create table t1 (d date);
|
||
insert into t1 values ('2004-07-14'),('2005-07-14');
|
||
select date_format(d,"%d") from t1 order by 1;
|
||
date_format(d,"%d")
|
||
14
|
||
14
|
||
drop table t1;
|
||
select str_to_date("2003-....01ABCD-02 10:11:12.0012", "%Y-%.%m%@-%d %H:%i:%S.%f") as a;
|
||
a
|
||
2003-01-02 10:11:12.001200
|
||
create table t1 select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f") as f1,
|
||
str_to_date("10:11:12.0012", "%H:%i:%S.%f") as f2,
|
||
str_to_date("2003-01-02", "%Y-%m-%d") as f3,
|
||
str_to_date("02", "%d") as f4, str_to_date("02 10", "%d %H") as f5;
|
||
describe t1;
|
||
Field Type Null Key Default Extra
|
||
f1 datetime(6) YES NULL
|
||
f2 time(6) YES NULL
|
||
f3 date YES NULL
|
||
f4 date YES NULL
|
||
f5 time YES NULL
|
||
select * from t1;
|
||
f1 f2 f3 f4 f5
|
||
2003-01-02 10:11:12.001200 10:11:12.001200 2003-01-02 0000-00-02 58:00:00
|
||
drop table t1;
|
||
create table t1 select "02 10" as a, "%d %H" as b;
|
||
select str_to_date(a,b) from t1;
|
||
str_to_date(a,b)
|
||
0000-00-02 10:00:00.000000
|
||
create table t2 select str_to_date(a,b) from t1;
|
||
describe t2;
|
||
Field Type Null Key Default Extra
|
||
str_to_date(a,b) datetime(6) YES NULL
|
||
select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f") as f1,
|
||
str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S") as f2,
|
||
str_to_date("2003-01-02", "%Y-%m-%d") as f3,
|
||
str_to_date("02 10:11:12", "%d %H:%i:%S.%f") as f4,
|
||
str_to_date("02 10:11:12", "%d %H:%i:%S") as f5,
|
||
str_to_date("02 10", "%d %f") as f6;
|
||
f1 f2 f3 f4 f5 f6
|
||
2003-01-02 10:11:12.001200 2003-01-02 10:11:12 2003-01-02 58:11:12.000000 58:11:12 48:00:00.100000
|
||
Warnings:
|
||
Warning 1292 Truncated incorrect datetime value: '2003-01-02 10:11:12.0012'
|
||
drop table t1, t2;
|
||
select str_to_date("2003-01-02 10:11:12.0012ABCD", "%Y-%m-%d %H:%i:%S.%f") as f1,
|
||
addtime("-01:01:01.01 GGG", "-23:59:59.1") as f2,
|
||
microsecond("1997-12-31 23:59:59.01XXXX") as f3;
|
||
f1 f2 f3
|
||
2003-01-02 10:11:12.001200 -25:01:00.110000 10000
|
||
Warnings:
|
||
Warning 1292 Truncated incorrect datetime value: '2003-01-02 10:11:12.0012ABCD'
|
||
Warning 1292 Truncated incorrect time value: '-01:01:01.01 GGG'
|
||
Warning 1292 Truncated incorrect datetime value: '1997-12-31 23:59:59.01XXXX'
|
||
select str_to_date("2003-04-05 g", "%Y-%m-%d") as f1,
|
||
str_to_date("2003-04-05 10:11:12.101010234567", "%Y-%m-%d %H:%i:%S.%f") as f2;
|
||
f1 f2
|
||
2003-04-05 2003-04-05 10:11:12.101010
|
||
Warnings:
|
||
Warning 1292 Truncated incorrect date value: '2003-04-05 g'
|
||
Warning 1292 Truncated incorrect datetime value: '2003-04-05 10:11:12.101010234567'
|
||
set names latin1;
|
||
select date_format('2004-01-01','%W (%a), %e %M (%b) %Y');
|
||
date_format('2004-01-01','%W (%a), %e %M (%b) %Y')
|
||
Thursday (Thu), 1 January (Jan) 2004
|
||
set lc_time_names=ru_RU;
|
||
set names koi8r;
|
||
select date_format('2004-01-01','%W (%a), %e %M (%b) %Y');
|
||
date_format('2004-01-01','%W (%a), %e %M (%b) %Y')
|
||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>), 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>) 2004
|
||
set lc_time_names=de_DE;
|
||
set names latin1;
|
||
select date_format('2004-01-01','%W (%a), %e %M (%b) %Y');
|
||
date_format('2004-01-01','%W (%a), %e %M (%b) %Y')
|
||
Donnerstag (Do), 1 Januar (Jan) 2004
|
||
set names latin1;
|
||
set lc_time_names=en_US;
|
||
create table t1 (f1 datetime);
|
||
insert into t1 (f1) values ("2005-01-01");
|
||
insert into t1 (f1) values ("2005-02-01");
|
||
select date_format(f1, "%m") as d1, date_format(f1, "%M") as d2 from t1 order by date_format(f1, "%M");
|
||
d1 d2
|
||
02 February
|
||
01 January
|
||
drop table t1;
|
||
select str_to_date( 1, NULL );
|
||
str_to_date( 1, NULL )
|
||
NULL
|
||
select str_to_date( NULL, 1 );
|
||
str_to_date( NULL, 1 )
|
||
NULL
|
||
select str_to_date( 1, IF(1=1,NULL,NULL) );
|
||
str_to_date( 1, IF(1=1,NULL,NULL) )
|
||
NULL
|
||
SELECT TIME_FORMAT("24:00:00", '%r');
|
||
TIME_FORMAT("24:00:00", '%r')
|
||
12:00:00 AM
|
||
SELECT TIME_FORMAT("00:00:00", '%r');
|
||
TIME_FORMAT("00:00:00", '%r')
|
||
12:00:00 AM
|
||
SELECT TIME_FORMAT("12:00:00", '%r');
|
||
TIME_FORMAT("12:00:00", '%r')
|
||
12:00:00 PM
|
||
SELECT TIME_FORMAT("15:00:00", '%r');
|
||
TIME_FORMAT("15:00:00", '%r')
|
||
03:00:00 PM
|
||
SELECT TIME_FORMAT("01:00:00", '%r');
|
||
TIME_FORMAT("01:00:00", '%r')
|
||
01:00:00 AM
|
||
SELECT TIME_FORMAT("25:00:00", '%r');
|
||
TIME_FORMAT("25:00:00", '%r')
|
||
01:00:00 AM
|
||
SELECT TIME_FORMAT("00:00:00", '%l %p');
|
||
TIME_FORMAT("00:00:00", '%l %p')
|
||
12 AM
|
||
SELECT TIME_FORMAT("01:00:00", '%l %p');
|
||
TIME_FORMAT("01:00:00", '%l %p')
|
||
1 AM
|
||
SELECT TIME_FORMAT("12:00:00", '%l %p');
|
||
TIME_FORMAT("12:00:00", '%l %p')
|
||
12 PM
|
||
SELECT TIME_FORMAT("23:00:00", '%l %p');
|
||
TIME_FORMAT("23:00:00", '%l %p')
|
||
11 PM
|
||
SELECT TIME_FORMAT("24:00:00", '%l %p');
|
||
TIME_FORMAT("24:00:00", '%l %p')
|
||
12 AM
|
||
SELECT TIME_FORMAT("25:00:00", '%l %p');
|
||
TIME_FORMAT("25:00:00", '%l %p')
|
||
1 AM
|
||
SELECT DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896);
|
||
DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896)
|
||
NULL
|
||
Warnings:
|
||
Warning 1292 Incorrect datetime value: '%Y-%m-%d %H:%i:%s'
|
||
select str_to_date('04 /30/2004', '%m /%d/%Y');
|
||
str_to_date('04 /30/2004', '%m /%d/%Y')
|
||
2004-04-30
|
||
select str_to_date('04/30 /2004', '%m /%d /%Y');
|
||
str_to_date('04/30 /2004', '%m /%d /%Y')
|
||
2004-04-30
|
||
select str_to_date('04/30/2004 ', '%m/%d/%Y ');
|
||
str_to_date('04/30/2004 ', '%m/%d/%Y ')
|
||
2004-04-30
|
||
"End of 4.1 tests"
|
||
SELECT DATE_FORMAT("0000-01-01",'%W %d %M %Y') as valid_date;
|
||
valid_date
|
||
Sunday 01 January 0000
|
||
SELECT DATE_FORMAT("0000-02-28",'%W %d %M %Y') as valid_date;
|
||
valid_date
|
||
Tuesday 28 February 0000
|
||
SELECT DATE_FORMAT("2009-01-01",'%W %d %M %Y') as valid_date;
|
||
valid_date
|
||
Thursday 01 January 2009
|
||
"End of 5.0 tests"
|
||
#
|
||
# Start of 5.1 tests
|
||
#
|
||
#
|
||
# Bug#58005 utf8 + get_format causes failed assertion: !str || str != Ptr'
|
||
#
|
||
SET NAMES utf8;
|
||
SELECT LEAST('%', GET_FORMAT(datetime, 'eur'), CAST(GET_FORMAT(datetime, 'eur') AS CHAR(65535)));
|
||
LEAST('%', GET_FORMAT(datetime, 'eur'), CAST(GET_FORMAT(datetime, 'eur') AS CHAR(65535)))
|
||
%
|
||
SET NAMES latin1;
|
||
#
|
||
# End of 5.1 tests
|
||
#
|
||
select time_format('2001-01-01 02:02:02', '%d.%m.%Y');
|
||
time_format('2001-01-01 02:02:02', '%d.%m.%Y')
|
||
NULL
|
||
select time_format('2001-01-01 02:02:02', '%d %T');
|
||
time_format('2001-01-01 02:02:02', '%d %T')
|
||
NULL
|
||
select time_format('01 02:02:02', '%d %T');
|
||
time_format('01 02:02:02', '%d %T')
|
||
NULL
|
||
select time_format('01 02:02:02', '%T');
|
||
time_format('01 02:02:02', '%T')
|
||
26:02:02
|
||
select time_format('2001-01-01 02:02:02', '%T');
|
||
time_format('2001-01-01 02:02:02', '%T')
|
||
02:02:02
|