2017-05-14 97 views
0
DECLARE @i INT 

SET @i=14 

SELECT COALESCE(@i, GetDate()); 

上面現在返回奇怪的行爲()在SQL SERVER與COALESCE使用時

1900-01-15 00:00:00.000 

如果我改變我到11,結果將是

1900-01-12 00:00:00.000 

不應該GETDATE( )返回當前日期時間?

+0

我想你可能對於COALESCE的工作原理有些困惑。如果第一個參數不爲空,爲什麼你會期望任何COALESCE返回第二個參數? – ZLK

+0

它更關心數據類型優先級,然後將int轉換爲datetime。由於第一個參數不爲null,它會看到涉及的優先級或數據類型是什麼。然後將第一個非null參數轉換爲該數據類型 –

回答

2

data type precedence

When an operator combines two expressions of different data types, the rules for data type precedence specify that the data type with the lower precedence is converted to the data type with the higher precedence.

1900-01-01 + 14是1900年1月15日,你的INT轉換爲日期時間,因爲第二個參數,以聚結的日期時間

+0

謝謝。在我嘗試SELECT CAST(@i作爲DateTime)之後有意義。 –