2013-04-04 54 views
4

我有以下SQL Server查詢:SQL Server查詢奇怪的輸出

SELECT ISNULL(MIN(P), 999) AS FLD 
FROM (SELECT '0' AS P) AS T 
WHERE (1 > 4) 

怎麼來此查詢的輸出爲 '*'?

請解釋

感謝

回答

11

ISNULL使用的第一個參數的數據類型。

這是varchar(1)因爲這是字面'0'

999的數據類型將被截斷,SQL服務器顯示爲 '*'

+0

什麼1> 4? SELECT ISNULL(MIN('0'),999)WHERE 1> 4給出'*',但是SELECT ISNULL('0',999)WHERE 1> 4給出空結果! – 2013-04-04 12:51:12

+0

@ Scorpi0沒有「GROUP BY」或「HAVING」的聚合總是返回一行。這是一個標量聚合(與矢量聚合相對)。空結果集上的標量聚合「MIN」將返回NULL值 – 2013-04-04 12:52:32

+0

我仍然感到困惑。 SELECT ISNULL(MIN('0'),999)輸出'0'。沒有WHERE子句的事實改變了MIN運算符的性質? – 2013-04-04 12:55:35