与null相比,为什么不是零日期,null?

时间:2017-10-05 10:39:35

标签: mysql date null

  1. SELECT NULL;打印

      

    <空>

  2. SELECT CAST('0000-00-00' AS DATE);打印

      

    <空>

  3. SELECT NULL IS NULL;打印

      

    1

  4. SELECT CAST('0000-00-00' AS DATE) IS NULL;打印

      

    0

  5. 为什么不是第4个陈述1的结果?

    在Windows上连接到MySQL 5.7.17时使用DataGrip进行测试。 enter image description here

4 个答案:

答案 0 :(得分:2)

因为2.不是真的:

producerA.flatMap(.concat) { _ in return producerB }
  .start(Signal.Observer(value: { value in
    print("Value \(value)")
  }, failed: {error in
    print("Error \(error)")
  }))
  

0000-00-00

它没有打印

  

NULL

enter image description here

答案 1 :(得分:2)

第4个陈述显示结果0000-00-00

在mysql中只有null为null。其他一切都不是,所以它返回1

Updated Result

答案 2 :(得分:1)

感谢kiks73iamsankalp89moscas的回答(kiks73's answer - iamsankalp89's answer - moscas's answer),这有助于我找到解决方案/解释我遇到的奇怪行为。

奇怪行为的原因是DataGrip使用的 JDBC驱动程序如何处理零日期。

它会从数据库中将日期作为零接收,然后将其转换为null

DataGrip connection and JDBC settings

由于JDBC转换,这将导致DataGrip将零日期读取为空值。

DataGrip Query Result

Howevenr,因为它在JDBC层(而不是数据库层)完成,数据库不会将这些值视为空值。

为了测试,我通过mysql shell运行数据库连接和查询,这将打印零而不是空值。

MySQL Shell Query Result

答案 3 :(得分:1)

在Ubuntu mysql中测试:

SELECT CAST('0000-00-00' AS DATE) ;

上述查询的值为null,

mysql> SELECT CAST('0000-00-00' AS DATE);
+----------------------------+
| CAST('0000-00-00' AS DATE) |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set, 1 warning (0.00 sec)
SELECT CAST('0000-00-00' AS DATE) IS NULL;

在上面的查询中,您尝试使用 IS NULL 函数检查值是否为空,答案是 True ,因此只有它显示的值为1。 / p>

mysql> SELECT CAST('0000-00-00' AS DATE) IS NULL;
+------------------------------------+
| CAST('0000-00-00' AS DATE) IS NULL |
+------------------------------------+
|                                  1 |
+------------------------------------+
1 row in set, 1 warning (0.00 sec)

使用其他人进行测试时

SELECT CAST('0000-00-00' AS DATE) ;

上述查询的值不会显示为 NULL

SELECT CAST('0000-00-00' AS DATE) IS NULL;

上述查询的结果为 False ,因此仅显示为 0