我用了mysql的date函数,但是它返回的是日期和时间,而不是日期,为什么呢?
date
select if(1, date(now()), time(now())) , if(1, date(now()), 'a'), if(1, time(now()), 'b') from dual;
bxfogqkk1#
第一个IF()生成的数据类型是日期时间,请参见:
IF()
CREATE TABLE test select if(1, date(now()), time(now())) , if(1, date(now()), 'a'), if(1, time(now()), 'b') from dual; SHOW CREATE TABLE test;
(also在此DBFIDDLE中)文档对此不是很清楚:
如果expr2或expr3中只有一个显式为NULL,则IF()函数的结果类型为非NULL表达式的类型。IF()的默认返回类型(当它存储到临时表中时可能会有影响)计算如下:
但是缺少使用DATE或TIME时返回类型的详细信息....
我忘了提到这是有意义的,因为结果集中的列只有一种数据类型。这可以在执行以下操作时看到:
create table test select if(1,date(now()),time(now())) A, if(0,date(now()),time(now())) B, if(1,1,'c') C, if(0,1,'d') D, if(1,date(now()),'E') E ; show create table test;
其中:
CREATE TABLE `test` ( `A` datetime DEFAULT NULL, `B` datetime DEFAULT NULL, `C` varchar(2) NOT NULL DEFAULT '', `D` varchar(2) NOT NULL DEFAULT '', `E` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
请注意,列E是一个varchar(10)
1条答案
按热度按时间bxfogqkk1#
第一个
IF()
生成的数据类型是日期时间,请参见:(also在此DBFIDDLE中)
文档对此不是很清楚:
如果expr2或expr3中只有一个显式为NULL,则IF()函数的结果类型为非NULL表达式的类型。
IF()的默认返回类型(当它存储到临时表中时可能会有影响)计算如下:
但是缺少使用DATE或TIME时返回类型的详细信息....
我忘了提到这是有意义的,因为结果集中的列只有一种数据类型。
这可以在执行以下操作时看到:
其中:
请注意,列E是一个varchar(10)