From ad3f8da8b3ebcef25353bed8f4600a2aff69fc4d Mon Sep 17 00:00:00 2001 From: wrenlu <15835214+wrenlu@user.noreply.gitee.com> Date: Mon, 19 May 2025 19:00:20 +0800 Subject: [PATCH] add oracle date format test --- .../zsql_cases/r/zsql_ora_date_format.result | 330 ++++++++++++++++++ .../zsql_cases/t/zsql_ora_date_format.cnf | 2 + .../zsql_cases/t/zsql_ora_date_format.test | 270 ++++++++++++++ 3 files changed, 602 insertions(+) create mode 100644 mysql-test/suite/zsql_cases/r/zsql_ora_date_format.result create mode 100644 mysql-test/suite/zsql_cases/t/zsql_ora_date_format.cnf create mode 100644 mysql-test/suite/zsql_cases/t/zsql_ora_date_format.test diff --git a/mysql-test/suite/zsql_cases/r/zsql_ora_date_format.result b/mysql-test/suite/zsql_cases/r/zsql_ora_date_format.result new file mode 100644 index 000000000..c65e2dd6b --- /dev/null +++ b/mysql-test/suite/zsql_cases/r/zsql_ora_date_format.result @@ -0,0 +1,330 @@ +create database yyc_test; +use yyc_test; +############################### +# test sql # +############################### +set sql_mode = 'STRICT_TRANS_TABLES'; +Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +create table empl_temp +( +employee_id NUMBER(6) primary key, +first_name varchar2(20), +last_name varchar2(25), +email varchar2(25), +hire_date DATE, +job_id VARCHAR2(10), +clob_column CLOB +); +insert into empl_temp values(111111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee'); +ERROR 22007: Incorrect date value: '10-JAN-2015' for column 'hire_date' at row 1 +insert into empl_temp values(254481,'Jane','Doe','example.com','15-NOV-2015','1005','Executive Employee'); +ERROR 22007: Incorrect date value: '15-NOV-2015' for column 'hire_date' at row 1 +insert into empl_temp values(854488,'Jane','Doe','example.com','15-DEC-2015','1005','Executive Employee'); +ERROR 22007: Incorrect date value: '15-DEC-2015' for column 'hire_date' at row 1 +drop table empl_temp; +set sql_mode = ''; +create table empl_temp +( +employee_id NUMBER(6) primary key, +first_name varchar2(20), +last_name varchar2(25), +email varchar2(25), +hire_date DATE, +job_id VARCHAR2(10), +clob_column CLOB +); +insert into empl_temp values(111111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee'); +Warnings: +Warning 1265 Data truncated for column 'hire_date' at row 1 +insert into empl_temp values(254481,'Jane','Doe','example.com','15-NOV-2015','1005','Executive Employee'); +Warnings: +Warning 1265 Data truncated for column 'hire_date' at row 1 +insert into empl_temp values(854488,'Jane','Doe','example.com','15-DEC-2015','1005','Executive Employee'); +Warnings: +Warning 1265 Data truncated for column 'hire_date' at row 1 +select * from empl_temp; +employee_id first_name last_name email hire_date job_id clob_column +111111 John Doe example.com 0000-00-00 1001 Experienced Employee +254481 Jane Doe example.com 0000-00-00 1005 Executive Employee +854488 Jane Doe example.com 0000-00-00 1005 Executive Employee +drop table empl_temp; +set sql_mode = 'ORA_DATATYPE'; +create table empl_temp +( +employee_id NUMBER(6) primary key, +first_name varchar2(20), +last_name varchar2(25), +email varchar2(25), +hire_date DATE default SYSDATE, +job_id VARCHAR2(10), +clob_column CLOB +); +set default_date_format = 'DD-MM-YYYY'; +insert into empl_temp values(111111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee'); +insert into empl_temp values(254481,'Jane','Doe','example.com','15-NOV-2015','1005','Executive Employee'); +insert into empl_temp values(854488,'Jane','Doe','example.com','15-DEC-2015','1005','Executive Employee'); +insert into empl_temp values(123132,'Jane','Doe','example.com',NULL,'1005','Executive Employee'); +select * from empl_temp; +employee_id first_name last_name email hire_date job_id clob_column +111111 John Doe example.com 2015-01-10 00:00:00 1001 Experienced Employee +123132 Jane Doe example.com NULL 1005 Executive Employee +254481 Jane Doe example.com 2015-11-15 00:00:00 1005 Executive Employee +854488 Jane Doe example.com 2015-12-15 00:00:00 1005 Executive Employee +set default_date_format = 'YYYY-MM-DD'; +select * from empl_temp; +employee_id first_name last_name email hire_date job_id clob_column +111111 John Doe example.com 2015-01-10 00:00:00 1001 Experienced Employee +123132 Jane Doe example.com NULL 1005 Executive Employee +254481 Jane Doe example.com 2015-11-15 00:00:00 1005 Executive Employee +854488 Jane Doe example.com 2015-12-15 00:00:00 1005 Executive Employee +set default_date_format = 'YYYY-MON-DD'; +select * from empl_temp; +employee_id first_name last_name email hire_date job_id clob_column +111111 John Doe example.com 2015-01-10 00:00:00 1001 Experienced Employee +123132 Jane Doe example.com NULL 1005 Executive Employee +254481 Jane Doe example.com 2015-11-15 00:00:00 1005 Executive Employee +854488 Jane Doe example.com 2015-12-15 00:00:00 1005 Executive Employee +create table empl_temp2 +( +employee_id NUMBER(6) primary key, +first_name varchar2(20), +last_name varchar2(25), +email varchar2(25), +hire_date DATE default SYSDATE, +job_id VARCHAR2(10), +clob_column CLOB +); +insert into empl_temp2 select * from empl_temp; +drop table empl_temp; +drop table empl_temp2; +############################### +# test to_date, to_timestamp # +############################### +set sql_mode = ''; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +TO_DATE('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00 +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30 +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30 +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'YYYY-MON-DD'; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +TO_DATE('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00 +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30 +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30 +set default_date_format = 'YYYY-MON-DD HH24:MI:SS'; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +TO_DATE('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00 +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30 +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30 +set default_date_format = 'YYYY-MON-DD HH24:MI:SS.FF9'; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +TO_DATE('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00 +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30 +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30 +# TO_DATE dont support FF +select TO_DATE('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); +ERROR HY000: invalid format 'FF' +set sql_mode = ''; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM') +2022-01-10 10:20:30.123456 +set sql_mode = 'ORA_DATATYPE'; +set default_timestamp_format = 'YYYY-MON-DD'; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM') +2022-01-10 10:20:30.123456 +set default_timestamp_format = 'YYYY-MON-DD HH24:MI:SS.FF6'; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM') +2022-01-10 10:20:30.123456 +set default_timestamp_format = 'YYYY-MON-DD HH24:MI:SS.FF6'; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY') +2022-01-10 00:00:00.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM') +2022-01-10 10:20:30.000000 +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM') +2022-01-10 10:20:30.123456 +set default_timestamp_format = 'YYYY-MON-DD HH12:MI:SS.FF6 AM'; +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); +TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM') +2022-01-10 10:20:30.123456 +############################### +# test precision # +############################### +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'DD-MON-YYYY'; +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; +create table t1( +id int primary key, +d date, +t timestamp(6) +); +insert into t1 values(1, '29-DEC-2022', '2022-01-02 03:04:05.678'); +select * from t1 where id = 1; +id d t +1 2022-12-29 00:00:00 2022-01-02 03:04:05.678000 +insert into t1 values(2, '28-DEC-2022', '2022-01-02 03:04:05.'); +select * from t1 where id = 2; +id d t +2 2022-12-28 00:00:00 2022-01-02 03:04:05.000000 +insert into t1 values(3, '27-DEC-2022', '2022-01-02 03:04:'); +select * from t1 where id = 3; +id d t +3 2022-12-27 00:00:00 2022-01-02 03:04:00.000000 +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF9'; +insert into t1 values(4, '26-DEC-2022', '2022-01-02 03:04:05.678901234'); +select * from t1 where id = 4; +id d t +4 2022-12-26 00:00:00 2022-01-02 03:04:05.678901 +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF'; +insert into t1 values(5, '25-DEC-2022', '2022-01-02 03:04:05.678901234'); +select * from t1 where id = 5; +id d t +5 2022-12-25 00:00:00 2022-01-02 03:04:05.678901 +insert into t1 values(6, '28-DEC-2022', '2022-01-02 03:04:05.678901234'); +select * from t1 where id = 6; +id d t +6 2022-12-28 00:00:00 2022-01-02 03:04:05.678901 +insert into t1 values(7, '28-DEC-2022', '2022-01-02 03:04:05.678901'); +select * from t1 where id = 7; +id d t +7 2022-12-28 00:00:00 2022-01-02 03:04:05.678901 +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF2'; +select * from t1; +id d t +1 2022-12-29 00:00:00 2022-01-02 03:04:05.678000 +2 2022-12-28 00:00:00 2022-01-02 03:04:05.000000 +3 2022-12-27 00:00:00 2022-01-02 03:04:00.000000 +4 2022-12-26 00:00:00 2022-01-02 03:04:05.678901 +5 2022-12-25 00:00:00 2022-01-02 03:04:05.678901 +6 2022-12-28 00:00:00 2022-01-02 03:04:05.678901 +7 2022-12-28 00:00:00 2022-01-02 03:04:05.678901 +drop table t1; +create table t1( +id int primary key, +d date, +t timestamp +); +insert into t1 values(1, '29-DEC-2022', '2022-01-02 03:04:05.67'); +select * from t1; +id d t +1 2022-12-29 00:00:00 2022-01-02 03:04:06 +drop table t1; +############################## +# test time, year unaffected # +############################## +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'DD-MON-YYYY'; +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; +create table t1( +id int, +tm time, +yr year +); +insert into t1 values(1, '10:11:12', '2022'); +select * from t1; +id tm yr +1 10:11:12 2022 +drop table t1; +################################################################## +# bug1: date: date in normal mode, datetime in ORA_DATATYPE # +# we change datetime in default_date_format but dont change date # +################################################################## +set sql_mode = ''; +create table t1( +id int, +d1 date, +d2 datetime, +t timestamp +); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int DEFAULT NULL, + `d1` date DEFAULT NULL, + `d2` datetime DEFAULT NULL, + `t` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'DD-MON-YYYY'; +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; +# date will truncate to 0000-00-00 # +insert into t1 values(1, '29-DEC-2022', '28-DEC-2022', '2022-01-02 03:04:05.678'); +Warnings: +Warning 1265 Data truncated for column 'd1' at row 1 +select * from t1; +id d1 d2 t +1 0000-00-00 2022-12-28 00:00:00 2022-01-02 03:04:06 +create table t2( +id int, +d1 date, +d2 datetime, +t timestamp +); +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `id` int DEFAULT NULL, + `d1` datetime DEFAULT NULL, + `d2` datetime DEFAULT NULL, + `t` timestamp NULL DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +insert into t2 values(1, '29-DEC-2022', '28-DEC-2022', '2022-01-02 03:04:05.678'); +select * from t2; +id d1 d2 t +1 2022-12-29 00:00:00 2022-12-28 00:00:00 2022-01-02 03:04:06 +drop database yyc_test; diff --git a/mysql-test/suite/zsql_cases/t/zsql_ora_date_format.cnf b/mysql-test/suite/zsql_cases/t/zsql_ora_date_format.cnf new file mode 100644 index 000000000..afa26d31a --- /dev/null +++ b/mysql-test/suite/zsql_cases/t/zsql_ora_date_format.cnf @@ -0,0 +1,2 @@ +[mysqld.1] +sql_mode = 'ORA_DATATYPE' diff --git a/mysql-test/suite/zsql_cases/t/zsql_ora_date_format.test b/mysql-test/suite/zsql_cases/t/zsql_ora_date_format.test new file mode 100644 index 000000000..3b27f953a --- /dev/null +++ b/mysql-test/suite/zsql_cases/t/zsql_ora_date_format.test @@ -0,0 +1,270 @@ +# ifdef HAVE_ZSQL_ORACLE_DATE_FORMAT +create database yyc_test; +use yyc_test; + +--echo ############################### +--echo # test sql # +--echo ############################### + +set sql_mode = 'STRICT_TRANS_TABLES'; + +create table empl_temp +( + employee_id NUMBER(6) primary key, + first_name varchar2(20), + last_name varchar2(25), + email varchar2(25), + hire_date DATE, + job_id VARCHAR2(10), + clob_column CLOB +); + +--error ER_TRUNCATED_WRONG_VALUE +insert into empl_temp values(111111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee'); +--error ER_TRUNCATED_WRONG_VALUE +insert into empl_temp values(254481,'Jane','Doe','example.com','15-NOV-2015','1005','Executive Employee'); +--error ER_TRUNCATED_WRONG_VALUE +insert into empl_temp values(854488,'Jane','Doe','example.com','15-DEC-2015','1005','Executive Employee'); + +drop table empl_temp; + + + +set sql_mode = ''; + +create table empl_temp +( + employee_id NUMBER(6) primary key, + first_name varchar2(20), + last_name varchar2(25), + email varchar2(25), + hire_date DATE, + job_id VARCHAR2(10), + clob_column CLOB +); + +insert into empl_temp values(111111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee'); +insert into empl_temp values(254481,'Jane','Doe','example.com','15-NOV-2015','1005','Executive Employee'); +insert into empl_temp values(854488,'Jane','Doe','example.com','15-DEC-2015','1005','Executive Employee'); + +select * from empl_temp; +drop table empl_temp; + + + +set sql_mode = 'ORA_DATATYPE'; + +create table empl_temp +( + employee_id NUMBER(6) primary key, + first_name varchar2(20), + last_name varchar2(25), + email varchar2(25), + hire_date DATE default SYSDATE, + job_id VARCHAR2(10), + clob_column CLOB +); + +set default_date_format = 'DD-MM-YYYY'; + +insert into empl_temp values(111111,'John','Doe','example.com','10-JAN-2015','1001','Experienced Employee'); +insert into empl_temp values(254481,'Jane','Doe','example.com','15-NOV-2015','1005','Executive Employee'); +insert into empl_temp values(854488,'Jane','Doe','example.com','15-DEC-2015','1005','Executive Employee'); +insert into empl_temp values(123132,'Jane','Doe','example.com',NULL,'1005','Executive Employee'); + +select * from empl_temp; + +set default_date_format = 'YYYY-MM-DD'; +select * from empl_temp; + +set default_date_format = 'YYYY-MON-DD'; +select * from empl_temp; + +create table empl_temp2 +( + employee_id NUMBER(6) primary key, + first_name varchar2(20), + last_name varchar2(25), + email varchar2(25), + hire_date DATE default SYSDATE, + job_id VARCHAR2(10), + clob_column CLOB +); + +insert into empl_temp2 select * from empl_temp; + +drop table empl_temp; +drop table empl_temp2; + + + +--echo ############################### +--echo # test to_date, to_timestamp # +--echo ############################### + +set sql_mode = ''; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); + +set sql_mode = 'ORA_DATATYPE'; + +set default_date_format = 'YYYY-MON-DD'; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); + +set default_date_format = 'YYYY-MON-DD HH24:MI:SS'; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); + +set default_date_format = 'YYYY-MON-DD HH24:MI:SS.FF9'; +select TO_DATE('10-JAN-2022','DD-MON-YYYY'); +select TO_DATE('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_DATE('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +--echo # TO_DATE dont support FF +--error ER_INVALID_FORMAT +select TO_DATE('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); + + +set sql_mode = ''; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); + +set sql_mode = 'ORA_DATATYPE'; + +set default_timestamp_format = 'YYYY-MON-DD'; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); + +set default_timestamp_format = 'YYYY-MON-DD HH24:MI:SS.FF6'; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); + +set default_timestamp_format = 'YYYY-MON-DD HH24:MI:SS.FF6'; +select TO_TIMESTAMP('10-JAN-2022','DD-MON-YYYY'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30','DD-MON-YYYY HH24:MI:SS'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30 AM','DD-MON-YYYY HH12:MI:SS AM'); +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); + + +set default_timestamp_format = 'YYYY-MON-DD HH12:MI:SS.FF6 AM'; +select TO_TIMESTAMP('10-JAN-2022 10:20:30.123456789 AM','DD-MON-YYYY HH12:MI:SS.FF9 AM'); + + +--echo ############################### +--echo # test precision # +--echo ############################### + +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'DD-MON-YYYY'; +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; + +create table t1( + id int primary key, + d date, + t timestamp(6) +); + +insert into t1 values(1, '29-DEC-2022', '2022-01-02 03:04:05.678'); +select * from t1 where id = 1; +insert into t1 values(2, '28-DEC-2022', '2022-01-02 03:04:05.'); +select * from t1 where id = 2; +insert into t1 values(3, '27-DEC-2022', '2022-01-02 03:04:'); +select * from t1 where id = 3; + +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF9'; +insert into t1 values(4, '26-DEC-2022', '2022-01-02 03:04:05.678901234'); +select * from t1 where id = 4; + +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF'; +insert into t1 values(5, '25-DEC-2022', '2022-01-02 03:04:05.678901234'); +select * from t1 where id = 5; + +insert into t1 values(6, '28-DEC-2022', '2022-01-02 03:04:05.678901234'); +select * from t1 where id = 6; + +insert into t1 values(7, '28-DEC-2022', '2022-01-02 03:04:05.678901'); +select * from t1 where id = 7; + +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF2'; +select * from t1; + +drop table t1; + +create table t1( + id int primary key, + d date, + t timestamp +); + +insert into t1 values(1, '29-DEC-2022', '2022-01-02 03:04:05.67'); +select * from t1; + +drop table t1; + + +--echo ############################## +--echo # test time, year unaffected # +--echo ############################## +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'DD-MON-YYYY'; +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; +create table t1( + id int, + tm time, + yr year +); +insert into t1 values(1, '10:11:12', '2022'); +select * from t1; + +drop table t1; + + + + +--echo ################################################################## +--echo # bug1: date: date in normal mode, datetime in ORA_DATATYPE # +--echo # we change datetime in default_date_format but dont change date # +--echo ################################################################## +set sql_mode = ''; +create table t1( + id int, + d1 date, + d2 datetime, + t timestamp +); +show create table t1; + +set sql_mode = 'ORA_DATATYPE'; +set default_date_format = 'DD-MON-YYYY'; +set default_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'; + +--echo # date will truncate to 0000-00-00 # +insert into t1 values(1, '29-DEC-2022', '28-DEC-2022', '2022-01-02 03:04:05.678'); +select * from t1; + + +create table t2( + id int, + d1 date, + d2 datetime, + t timestamp +); +show create table t2; + +insert into t2 values(1, '29-DEC-2022', '28-DEC-2022', '2022-01-02 03:04:05.678'); +select * from t2; + + +drop database yyc_test; + + +# endif HAVE_ZSQL_ORACLE_DATE_FORMAT \ No newline at end of file -- Gitee