2017-10-05 64 views
2
  1. SELECT NULL;打印與null,null相比,爲什麼不是零日期?

    <空>

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

    <空>

  3. SELECT NULL IS NULL;打印

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

爲什麼是不是第四條語句1的結果?

在Windows上連接到MySQL 5.7.17時,使用DataGrip進行了測試。 enter image description here

+2

當我嘗試第二個語句,它打印'0000-00 -00',而不是''? – waka

回答

1

感謝kiks73iamsankalp89moscas爲他們的答案(kiks73's answer - iamsankalp89's answer - moscas's answer),它幫我找到了奇怪的問題的解決方案/解釋,我遇到了。

奇怪行爲的原因是DataGrip使用的JDBC驅動程序將如何處理零日期。

它會從數據庫接收日期爲零,然後將其轉換爲空

DataGrip connection and JDBC settings

這將導致DataGrip閱讀零個日期爲因爲JDBC轉換的空值。

DataGrip Query Result

Howevenr,因爲其在JDBC層(未在數據庫層)完成的數據庫不看到這些值作爲零點。

爲了測試這個,我運行了數據庫連接和通過mysql shell查詢,這將打印零而不是空值。

MySQL Shell Query Result

2

因爲2是不正確的:

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

0000-00-00

它不打印

NULL

enter image description here

+0

更新的問題 – naaz

2

4日聲明中顯示結果0000-00-00

在MySQL只空爲空。一切是沒有,所以它返回1

Updated Result

+0

更新的問題 – naaz

+0

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

+0

,但根據陳述2(在我的測試中),左側評估爲空, – naaz

1

測試在Ubuntu的MySQL:

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

上述查詢的值爲空,

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; 

在上面的查詢中,您要檢查值爲null使用IS NULL功能,答案是所以只有它的顯示值爲1

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) ; 

上述查詢的值wo不顯示爲NULL

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

上述查詢的結果是假,因此,只有它顯示爲