MySQL date()返回带有日期的时间,只需要日期

irlmq6kh  于 2023-02-07  发布在  Mysql
关注(0)|答案(1)|浏览(213)

我用了mysql的date函数,但是它返回的是日期和时间,而不是日期,为什么呢?

select if(1, date(now()), time(now())) , if(1, date(now()), 'a'), if(1, time(now()), 'b') from dual;

bxfogqkk

bxfogqkk1#

第一个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中)
文档对此不是很清楚:

    • IF(表达式1,表达式2,表达式3)**
  • 如果expr1为TRUE(expr1〈〉0且expr1不为NULL),则IF()返回expr2,否则返回expr3。

如果expr2或expr3中只有一个显式为NULL,则IF()函数的结果类型为非NULL表达式的类型。
IF()的默认返回类型(当它存储到临时表中时可能会有影响)计算如下:

  • 如果expr2或expr3生成字符串,则结果为字符串。
  • 如果expr2和expr3都是字符串,并且其中一个字符串区分大小写,则结果也区分大小写。
  • 如果expr2或expr3生成浮点值,则结果为浮点值。
  • 如果expr2或expr3生成整数,则结果为整数。

但是缺少使用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)

相关问题