今天执行了一个函数,逻辑是这样的:
create table t1(a datetime);
insert into t9 values ('2019-03-05 01:53:55.63');
然后,在mysql中执行
select * from t9 where a='2019-03-05 01:53:55.63';
通过,正常查询到数据。
但是在ORACAL中查询相同命令,报错,报错内容:格式不匹配。
然后写了一个函数:
select * from t1 where a= TO_DATE('2021-01-06 22:51:03','yyyy-mm-dd hh-mi-ss')
报错,显示时间超限。
select * from t1 where a= TO_DATE('2021-01-06 22:51:03','yyyy-mm-dd hh24-mi-ss')
通过。
原因:mysql和oracal在处理datetime时的处理方式不同。
mysql可以以文本的方式处理datetime。
进行了一些测试:
a是datetime,默认是YYYY-MM-DD HH-MM-SS
在mysql数据库
update t9 set a='1995-9-10';
通过。显示时间为 1995-09-10 00:00:00.0
update t9 set a='1995-9-10 01';
通过。显示时间为 1995-09-10 01:00:00.0
update t9 set a='1995-9-12 01';
正常报错。
update t9 set a=0
通过,值为NULL。
update t9 set a=1
报错。
update t9 set a='1995/12/10 23';
报错。
总的来说,mysql支持文本转datetime参数而且功能很强大。但是相对oracal就不支持,需要使用to_datetime进行转化。
tip:是不是mysql自动调用了字符串转datetime的参数?这个我不清楚。
上网查了查参数,oracal是以int值的方式储存datetime数据,要使用TO_DATE进行字符串转datetime。
mysql和oracle的函数参数不一致……
真难。